ios – Swift:Array属性,其元素同时符合类和多个协议

ios – Swift:Array属性,其元素同时符合类和多个协议,第1张

概述在Objective-C中,有一种方法可以声明符合类和一组协议的变量,如下所示: BaseClass<Protocol1, Protocol2> *variable = ... 在Swift中,我想声明一个数组(实际上是一个类的属性),其中包含由此模式定义的类型的元素. 在this question中,有一种解决方案,用于通过使类具有通用性并相应地约束类型来描述独立属性的类型.为了实例化这样的类, 在Objective-C中,有一种方法可以声明符合类和一组协议的变量,如下所示:

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属性,其元素同时符合类和多个协议所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1070124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存