我有这个协议:
protocol TestProtocol {
func doSomething
}
我想使用这个协议来确保某些属性符合它:
class MyClass {
var detailVC : UIViewController <TestProtocol>
}
像好老的ObjC一样,确保detailVC符合TestProtocol
答案 0 :(得分:2)
protocol MyViewControllerProtocol {
func protoFunc()
}
class MyClass {
var prop: MyViewControllerProtocol?
}
就这么简单。但是,如果您希望预定义的类符合协议,那么您需要进行扩展(但这适用于整个类)或者您将其子类化。
因此...
作为整个班级的延伸:
extension UIViewController: MyProtocol {
func protoFunc() {
print("do whatever")
}
}
在这种情况下,扩展时,您可以将属性设置为:
var myProperty: UIViewController?
在扩展之后,它将符合要求。
或者只是将其子类化为:
class MyConformingViewController: UIViewController, MyProtocol {
override func protoFunc() {
print("do whatever")
}
}
在这种情况下,您只需将属性设置为:
var myProp: MyConformingViewController?
由于该类被设置为符合它,因此会自动确认MyProtocol
。
您不能强制预先指定的类符合首先尚未指定符合该协议的协议。
e.g。 UIViewController最初未设置为向MyOtherProtocol
确认例如
这首先会破坏协议的目标。这就是为什么要么将它扩展为符合,要么将其子类化为符合。
答案 1 :(得分:0)
所以你可以实现如下方法:
class detailVC : UIViewController, TestProtocol {
func doSomething() {}
}
答案 2 :(得分:0)
在Swift中,你不能拥有一种类型的变量,也可以声明为协议类型。
您可以拥有的是一个需要符合多个协议的变量。
class MyClass {
var detailVC : TestProtocol
}
class MyClass {
var detailVC : protocol<TestProtocol,SecondProtocol>
}