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