首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特4动态铸造

斯威夫特4动态铸造
EN

Stack Overflow用户
提问于 2018-03-14 07:17:24
回答 1查看 723关注 0票数 1

我有一个叫Filters的类

代码语言:javascript
复制
class Filters {

   typealias States = [State]
   typealias Cities = [City]
   typealias Areas = [Area]

   var states : States?
   var cities : Cities?
   var areas : Areas?
}

FilterViewController中,基于用户的选择,pickerViewItems将填充filters.statesfilters.citiesfilters.areas项。

问题是当我用三个数组项中的一个填充pickerViewItems时,例如filters.states,我不能将它转换为States,这样我就可以使用

pickerViewItems[row].name

类型'Any‘的值没有成员'name’

如何在Swift中动态设置pickerViewItems类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 07:24:48

Swift基本上是一种静态语言,所以您不能动态地更改类型。因此,我们将使用多态性来解决这个问题。

假设StateCityArea都有name属性,则可以创建如下协议:

代码语言:javascript
复制
protocol NamedLocation {
    var name: String { get; }
}

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

代码语言:javascript
复制
extension State: NamedLocation { }
extension City: NamedLocation { }
extension Area: NamedLocation { }

现在,您可以将pickerViewItems设置为[NamedLocation]类型,并且仍然可以访问name属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49271728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档