BaseClass<Protocol1,Protocol2> *variable = ...
在Swift中,我想声明一个数组(实际上是一个类的属性),其中包含由此模式定义的类型的元素.
在this question中,有一种解决方案,用于通过使类具有通用性并相应地约束类型来描述独立属性的类型.为了实例化这样的类,有必要指定确切的类型.这对于独立属性来说不是问题,但在数组中应该可以存储具有不同确切类型的元素.
有没有办法在Swift中表达这个?
解决方法 感谢 @SebastianDressler和 @Mike-S,我发现在Swift中没有一种简单的方法来表达这一点.你可以做的是限制你想要添加到数组的项目的类型,如下所示:
func addItem<T where T: BaseClass,T: Protocol1,T: Protocol2>(item: T) { self.array.append(item)}
当类型被定义为协议的基类之一时,从数组中转换项是不可能的,因为编译器看不到这些类型之间的任何关系.
为了能够转换为基类或其中一个协议,有必要将类型声明为AnyObject.
var array: [AnyObject] = []
并且只有在使用@objc注释时才能转换为协议(参见https://stackoverflow.com/a/24318145/670119).
总结以上是内存溢出为你收集整理的ios – Swift:Array属性,其元素同时符合类和多个协议全部内容,希望文章能够帮你解决ios – Swift:Array属性,其元素同时符合类和多个协议所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)