我有一个名为Filters
class Filters {
typealias States = [State]
typealias Cities = [City]
typealias Areas = [Area]
var states : States?
var cities : Cities?
var areas : Areas?
}
在FilterViewController
中,根据用户的选择,pickerViewItems
将填充filters.states
,filters.cities
或filters.areas
的项目。< / p>
问题是当我使用三个数组项之一填充pickerViewItems
时,例如filters.states
,我无法将其投放到States
,因此我可以使用
pickerViewItems[row].name
类型的价值&#39;任何&#39;没有会员&#39;名称&#39;
如何在Swift中动态设置pickerViewItems
的类型?
答案 0 :(得分:2)
Swift几乎是一种静态语言,因此您无法动态更改类型。因此,我们将使用 polymorphism 解决此问题。
假设State
,City
和Area
都具有name
属性,您可以创建如下协议:
protocol NamedLocation {
var name: String { get; }
}
并使所有三个类符合协议:
extension State: NamedLocation { }
extension City: NamedLocation { }
extension Area: NamedLocation { }
现在,您可以将pickerViewItems
设为[NamedLocation]
类型,然后仍然可以访问name
媒体资源。