在Objective-C中,可以写出类似的东西:
@property(retain) UIView<Protocol1,Protocol2,...> *myView;
但是我该怎么写这个代码呢?
我已经知道如何使属性符合许多协议,但是通过使用继承不起作用:
var myView: ??? protocol<Protocol1,...>
编辑:
我使用许多UIView子类型,如UIImageView,UILabel或其他,我需要使用一些UIView属性加上协议中定义的一些方法。在最坏的情况下,我可以创建一个具有所需属性的UIViewProtocol,但是我知道Swift是否可以声明一个类型和一些协议符合的属性/变量。
您可以使用通用类使用
where clause:
原文链接:https://www.f2er.com/swift/320728.htmlA where clause enables you to require that an associated type conforms
to a certain protocol,and/or that certain type parameters and
associated types be the same.
要使用它,使类的属性在通用类中定义为type constraint,以检查您的属性的type parameter是否与您所需的基类和协议匹配。
对于您的具体示例,它可能看起来像这样:
class MyViewController<T where T: UIView,T: Protocol1,T: Protocol2>: UIViewController { var myView: T // ... }