小编典典

Swift:符合特定类别且同时符合多种协议的属性

swift

在Objective-C中,可以编写如下代码:

@property(retain) UIView<Protocol1, Protocol2, ...> *myView;

但是如何快速编写此代码?

我已经知道如何使一个属性符合许多协议,但是使用继承不能正常工作:

var myView: ??? protocol<Protocol1, Protocol2, ...>

编辑:

我用许多UIView亚型像UIImageViewUILabel或别人,我需要使用一些的UIView属性加在协议定义的一些方法。在最坏的情况下,我可以UIViewProtocol使用所需的属性创建一个,但是我想知道在Swift中是否可以使用类型和某种协议来声明一个属性/变量。


阅读 357

收藏
2020-07-07

共1个答案

小编典典

您可以使用where子句对通用类进行此操作

使用where子句可以要求关联的类型符合某种协议,并且/或者某些类型的参数和关联的类型必须相同。

若要使用它,请在具有类型约束的泛型类中定义您的属性类,以检查属性的type参数是否与所需的基类和协议相匹配。

对于您的特定示例,它可能看起来像这样:

class MyViewController<T where T: UIView, T: Protocol1, T: Protocol2>: UIViewController {
    var myView: T

    // ...
}
2020-07-07