在Objective-C中,可以编写如下代码:
@property(retain) UIView<Protocol1, Protocol2, ...> *myView;
但是如何快速编写此代码?
我已经知道如何使一个属性符合许多协议,但是使用继承不能正常工作:
var myView: ??? protocol<Protocol1, Protocol2, ...>
编辑:
我用许多UIView亚型像UIImageView,UILabel或别人,我需要使用一些的UIView属性加在协议定义的一些方法。在最坏的情况下,我可以UIViewProtocol使用所需的属性创建一个,但是我想知道在Swift中是否可以使用类型和某种协议来声明一个属性/变量。
UIView
UIImageView
UILabel
UIViewProtocol
您可以使用where子句对通用类进行此操作:
使用where子句可以要求关联的类型符合某种协议,并且/或者某些类型的参数和关联的类型必须相同。
若要使用它,请在具有类型约束的泛型类中定义您的属性类,以检查属性的type参数是否与所需的基类和协议相匹配。
对于您的特定示例,它可能看起来像这样:
class MyViewController<T where T: UIView, T: Protocol1, T: Protocol2>: UIViewController { var myView: T // ... }