【发布时间】:2014-09-10 13:47:46
【问题描述】:
在 Objective-C 中,可以这样写:
@property(retain) UIView<Protocol1, Protocol2, ...> *myView;
但是我怎样才能用 swift 编写这段代码呢?
我已经知道如何让一个属性符合许多协议,但是使用继承却不行:
var myView: ??? protocol<Protocol1, Protocol2, ...>
编辑:
我使用许多UIView 子类型,如UIImageView、UILabel 或其他,我需要使用一些UIView 属性以及协议中定义的一些方法。在最坏的情况下,我可以创建一个带有所需属性的UIViewProtocol,但我会知道是否可以在 Swift 中声明一个属性/变量,其类型和协议要符合。
【问题讨论】:
-
我认为这不可能像您在 Objective-C 中那样。你能多谈谈协议吗?认为可能有一种更适合 Swift 的不同方法。
-
我不明白为什么你会试图强制一个像 UIView 或 UILabel 这样的类来遵守一些它还没有遵守的协议,在这种情况下,没有必要指定它。您是否扩展这些类以符合新协议?
-
@TomErikStøwer 我认为这确实是最好的解决方案。我仍在学习 Swift,我会知道它是否可能像在 Objective-C 中一样。是的,我扩展它们以符合新协议,所以没有问题。
-
@GuidoHendriks 协议可以帮助我进行一些视图选择和拖放操作。就像我之前说的,我还在学习 Swift,所以我尝试用同样的方式学习新事物。
-
@YannickL。好的,我明白了,但是如果您已经在扩展这些类,那么从属性声明的角度来看,协议一致性不是隐含的吗?