如何声明一个符合协议的特定类的属性?

Ube*_*son 11 protocols ios swift

假设我想创建一个属性,它是UIViewController的子类,并且符合协议MyDelegateProtocol.在Objective-C中,我会写一些类似于:

@property (strong, nonatomic) UIViewController<MyDelegateProtocol> *delegate;
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何在Swift中写这个.我知道如何声明一个符合协议的属性,或者一个特定类型的属性:

let delegate : MyDelegateProtocol?
let delegate : UIViewController?
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何做到这两点.如果我尝试类似的东西:

let delegate : UIViewController<MyDelegateProtocol> ?
Run Code Online (Sandbox Code Playgroud)

然后我得到一个编译器错误Cannot specialize non-generic type 'UIViewController'.可能是因为我现在正在徘徊在仿制药领域.我试过通过Swift关于协议的协议和其他Stack Overflow问题的书,但我还没有找到我正在寻找的东西.

Ube*_*son 4

3 年后回答我自己的问题,Swift 4 支持组合的类和协议类型:

let delegate: UIViewController & MyDelegateProtocol
Run Code Online (Sandbox Code Playgroud)