gpt4 book ai didi

swift - 分配给协议(protocol)中定义的 var 说它不能分配给它

转载 作者:搜寻专家 更新时间:2023-11-01 06:49:17 25 4
gpt4 key购买 nike

这是一个简单的用例:

protocol Debuggable {
var _d: String -> () {
get set
}
}

class Debugger {

class func attach(instance: Debuggable) {
let d = Debugger()
instance._d = d.d // This doesn't work
}

func d(message: String) {
println(message)
}

}

编译时的错误消息:实例中无法分配给 _d,尽管我的协议(protocol)使用 getter 和 setter 定义了 var。

最佳答案

这是编译器为您捕获错误的一个很好的例子:)

instance 可能是一个值类型,因此被复制到这个方法中。在那种情况下,您将修改副本并将其丢弃。最快的解决方法是将其定义为 inout 参数:

class func attach(inout instance: Debuggable) {
let d = Debugger()
instance._d = d.d
}

不过我认为返回实例会更好:

class func attach(instance: Debuggable) -> Debuggable {
let d = Debugger()
var ret = instance
ret._d = d.d
return ret
}

我觉得inout主要是为了向后兼容Objective-C和C的语言。让类型决定是否应该复制它而不是强制它通过引用传递。如果某物被定义为值类型,这是有充分理由的。

关于swift - 分配给协议(protocol)中定义的 var 说它不能分配给它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235584/

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