gpt4 book ai didi

Swift 协议(protocol)扩展 `var { get }` 覆盖实现的 `let`

转载 作者:行者123 更新时间:2023-11-28 06:42:53 25 4
gpt4 key购买 nike

当将实现结构分配给类型为 protocol 的变量时,使用 varlet 实现属性的行为不同。

protocol Req {
var path: String? { get }
}
extension Req {
var path: String? { return "Req" }
}

struct LetReq: Req {
let path = "LetReq"
}
struct VarReq: Req {
var path: String? { return "VarReq" }
}

var req: Req!

req = VarReq()
req.path // prints "VarReq"

req = LetReq()
req.path // prints "Req" not "LetReq" which seems very awkward.

这是 Swift 设计的行为吗?

最佳答案

我认为这是一个编译器错误。如果您将 LetReq 设为可选字符串,它会按预期工作:

struct LetReq: Req {
let path: String? = "LetReq"
}

File a bug与 Apple。

关于Swift 协议(protocol)扩展 `var { get }` 覆盖实现的 `let`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450461/

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