代码之家  ›  专栏  ›  技术社区  ›  Hadi Sharghi

swift 4中的动态类型铸造

  •  1
  • Hadi Sharghi  · 技术社区  · 8 年前

    我有一个班叫 Filters

    class Filters {
    
       typealias States = [State]
       typealias Cities = [City]
       typealias Areas = [Area]
    
       var states : States?
       var cities : Cities?
       var areas : Areas?
    }
    

    在a中 FilterViewController ,根据用户的选择, pickerViewItems 将填充以下项目 filters.states ,则, filters.cities filters.areas

    问题是当我填充 pickerViewItems 使用三个数组项之一,例如。 过滤器。各州 ,我不能投给 States 所以我可以使用

    pickerViewItems[row].name

    “Any”类型的值没有成员“name”

    如何设置 pickerViewItems 在Swift中动态显示?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Sweeper    8 年前

    Swift几乎是一种静态语言,因此不能动态更改类型。因此,我们将使用 多态性 来解决这个问题。

    假设 State ,则, City Area 所有人都有 name 属性,可以创建如下协议:

    protocol NamedLocation {
        var name: String { get; }
    }
    

    并使所有三类都符合协议:

    extension State: NamedLocation { }
    extension City: NamedLocation { }
    extension Area: NamedLocation { }
    

    现在你可以 pickerViewItems 类型为 [NamedLocation] 您仍然可以访问 名称 所有物