在 OC 中想要定义一个变量是某个类的实例,并且遵守了若干 Protocol 很容易实现,比如:
SomeClass<Protocol01, Protocol02> *instance = ...
在 Swift 中如果想要实现同样的效果应该怎么办呢?可以按照下面的写法实现:
var instance: SomeClass & Protocol01 & Protocol02 = ...
需要注意的是,如果 SomeClass 或者 Protocol 最低版本大于工程支持的最低版本,同样需要添加 @avaliable
标注。
如果是想在一个方法中的参数实现同样的效果可以这样写:
class SomeClass {
let mySpecialViewController: VCWithSomeProtocol
init<T: UIViewController>(injectedViewController: T) where T: SomeProtocol {
self.mySpecialViewController = VCWithSomeProtocol(vc: injectedViewController)
}
}