gpt4 book ai didi

swift - 具有通用委托(delegate)的通用类。如何区分哪个对象的委托(delegate)正在执行回调?

转载 作者:行者123 更新时间:2023-11-30 12:18:28 25 4
gpt4 key购买 nike

MyClass 是一个具有通用委托(delegate)的通用类。AClass 包含 MyClass 的两个 iVar 实例,并且还实现了 MyClassDelegate。

如果AClass实现了MyClassDelegate,我如何区分哪个对象正在调用接口(interface)?对于非泛型类,== 是可以接受的。

请参阅此代码片段底部的注释和错误消息。

protocol MyClassDelegate: class {
func myClass<T>(_ myClass: MyClass<T>, valueDidChange value: T)
}

class MyClass<T: Comparable> {
private var _value: T
var value: T {
set {
delegate?.myClass(self, valueDidChange: newValue)
}
get {
return _value
}
}
var delegate: MyClassDelegate?
init(value: T) {
_value = value
}
}

class AClass {
private var thing1 = MyClass(value: Int(10))
private var thing2 = MyClass(value: Int(100))
private var thing3 = MyClass(value: TimeInterval(10))
private var thing4 = MyClass(value: TimeInterval(100))

init() {
thing1.delegate = self
thing2.delegate = self
thing3.delegate = self
thing4.delegate = self
}
}

extension AClass: MyClassDelegate {
func myClass<T>(_ myClass: MyClass<T>, valueDidChange value: T) {
// This fails to complile
// Binary operator '==' cannot be applied to operands of type 'MyClass<T>' and 'MyClass<Int>'
if myClass == thing1 {

}
// Binary operator '==' cannot be applied to operands of type 'MyClass<T>' and 'MyClass<TimeInterval>' (aka 'MyClass<Double>')
else if myClass == thing3 {

}
}
}

最佳答案

限制 T输入您的协议(protocol)方法签名 func myClass<T>(...)成为Comparable 。由于您仅将其限制在该协议(protocol)的一个特定扩展中,因此 AClass 中的方法可以采用任何类型的 T ,不仅仅是 Comparable的。

关于swift - 具有通用委托(delegate)的通用类。如何区分哪个对象的委托(delegate)正在执行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45114426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com