我有一个名为MessageType的associatedtype协议。
protocol MessageProtocol: class {
associatedtype MessageType
func sendMessage(_ with: MessageType)
}
然后在控制器中实现
extension MainController: MessageProtocol{
typealias MessageType = String
func sendMessage(_ with: MessageType) {
// sending message
}
}
我的目的是在下面这样的其他控制器中使用协议作为委托。
final class AnotherController {
weak var messagerDelegate: MessageProtocol?
...
}
但我错了
协议“MessageProtocol”只能用作泛型约束
因为它有自己或相关的类型要求
有办法处理这个错误吗?
我在读一篇关于这种情况的博文。
https://www.bignerdranch.com/blog/why-associated-type-requirements-become-generic-constraints/
我已经了解了情况,但不知道如何才能做到这一点?
谢谢,
最佳答案
我这样处理情况。
final class AnotherController<T: MessageProtocol> where T.MessageType == String {
weak var messagerDelegate: T?
...
}
如果我想以编程方式创建另一个控制器实例,我就这样创建了。
let instance = AnotherController<MainController>(frame: CGRect.zero)
instance.delegate = self
...
因为从
MainController
也许这不是常见的情况,但对我有效。
关于ios - 如何将通用(关联类型要求)协议(protocol)作为委托(delegate)委派给任何 Controller ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57837632/