将对象定义为类的“类型”并实现协议

时间:2016-02-10 17:47:05

标签: swift

我需要将Class的属性定义为类型UIViewController并实现协议MyProtocol。在Objective-C中,我可以编写类似

的内容
UIViewController<MyProtocol> myProperty;

我在文档上找不到任何内容,所以我认为这是不可能的:/你能否确认...这里是添加更多信息的示例代码

class SignInPresenter {

    var myProperty:UIViewController and MyProtocol <--- here is the problem. 

2 个答案:

答案 0 :(得分:1)

你有两个选择。您可以使用带有类型约束的Generic,也可以使用带有类型约束的协议扩展。

对于泛型,它看起来像:

protocol P1 {
}

class X {
}

class Y : X, P1 {
}


class Z<T: X,P1> {
    var myProp : T?
}

在协议扩展的情况下,您可以使用协议提供所需的方法和属性,并在类(例如UIViewController)实现协议时使用扩展来实现特定情况。如果你真的不需要UIViewController,这可能是一个更好的选择,但它将在实践中使用。我更喜欢这种设计,因为它允许更松散的耦合。

答案 1 :(得分:-2)

首先,用逗号定义多个协议。例如,

class SearchResultsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, APIControllerProtocol

其次,变量不符合协议。从Apple的文档中,&#34;协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图。然后,可以通过类,结构或枚举来采用该协议,以提供这些要求的实际实现。任何满足协议要求的类型都被认为符合该协议。&#34;