【发布时间】:2021-01-15 11:53:16
【问题描述】:
理想情况下,我想创建一个BaseViewController 类,该类接受(委托的)协议类型并有一个弱变量作为委托。像这样的:
class BaseViewController<Delegate: AnyObject> {
weak var delegate: Delegate?
init(delegate: Delegate) {
self.delegate = delegate
super.init(...)
}
}
然后像这样从视图控制器继承:
protocol MyDelegate: AnyObject {
func funcA()
func funcB()
}
class SomeViewController: BaseViewController<MyDelegate> {
func doSomething() {
delegate?.funcA()
}
}
编译器抱怨这不起作用:
'BaseViewController' 要求 'MyDelegate' 是类类型
如何解决这个问题以实现我的需要?
在此先感谢:)
【问题讨论】:
-
那是因为在 swift 协议中不会自己确认,您不能使用“MyProtocol”作为确认协议“MyDelegate”示例的具体类型:stackoverflow.com/questions/33112559/…
-
协议不是对象。您需要创建一个符合
MyDelegate协议的类,例如MyDelegateClass,并使用它来专门化您的泛型。
标签: ios swift generics delegates protocols