我有一个叫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项。
问题是当我用三个数组项中的一个填充pickerViewItems时,例如filters.states,我不能将它转换为States,这样我就可以使用
pickerViewItems[row].name
类型'Any‘的值没有成员'name’
如何在Swift中动态设置pickerViewItems类型?
发布于 2018-03-14 07:24:48
Swift基本上是一种静态语言,所以您不能动态地更改类型。因此,我们将使用多态性来解决这个问题。
假设State、City和Area都有name属性,则可以创建如下协议:
protocol NamedLocation {
var name: String { get; }
}并使所有三个类都符合协议:
extension State: NamedLocation { }
extension City: NamedLocation { }
extension Area: NamedLocation { }现在,您可以将pickerViewItems设置为[NamedLocation]类型,并且仍然可以访问name属性。
https://stackoverflow.com/questions/49271728
复制相似问题