【发布时间】:2021-12-26 01:46:55
【问题描述】:
我有 2 个这样的协议:
protocol Receiver {
associatedtype Input
func send(_ input: Input)
}
protocol Sender {
associatedtype Output
init<T: Receiver>(_ receiver: T) where T.Input == Output
}
为了实现Sender,我首先这样做:
class TestSender: Sender {
typealias Output = String
required init<T: Receiver>(_ receiver: T) where T.Input == Output {
}
}
但是,我需要将来自 init 的 receiver 存储为类属性。由于Receiver 有关联的类型要求,我必须为整个TestSender 类添加一个泛型类型约束,如下所示:
class TestSender<T: Receiver>: Sender where T.Input == String
然后我可以像这样在TestSender 中声明一个属性:
private let receiver: T
但在初始化程序中,我不能分配receiver。
required init<T: Receiver>(_ receiver: T) where T.Input == Output {
self.receiver = receiver // Cannot assign value of type 'T' to type 'T'
}
我尝试改变init方法如下:
init(_ receiver: T) {
self.receiver = receiver
}
但是现在,Swift 编译器说我没有正确地遵守协议。这样做的正确方法是什么?
【问题讨论】: