gpt4 book ai didi

Swift OptionSetType 重置自定义属性

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

我想创建一个带有自定义属性的 OptionSetType:

struct Options: OptionSetType {

let rawValue: Int

init(rawValue: Int) {
self.rawValue = rawValue
}

// some option
static let opt = Options(rawValue: 1)

// custom stored property
var a = 0

}

每次调用 OptionSetType 协议(protocol)的方法 insertremove 时,自定义属性都会重置:

var x: Options = []

x.rawValue // => 0
x.a = 1 // => 1

x.insert(.opt)
x.rawValue // => 1
x.a // => 0 <-- a is changed

我的猜测是 insert(_:) 做了这样的事情:

self = Options(rawValue: newValueWithInsertedOption)

重置结构。有什么方法可以保值吗?

最佳答案

结构按值传递(复制),类按引用传递。保持直线行驶肯定会很痛苦。

当您运行 x.insert(.opt) 时,您正在使用 Options(rawValue: 1) 初始化一个新结构并复制 的原始值>a 而不是执行之前可能已设置的引用。

因此,尽管您之前已在代码中将 a 设置为 1,但之后的插入会初始化一个新结构,然后 a回到 0

查看结构值传递的详细解释以获取更多信息: https://stackoverflow.com/a/26006268/4228039

结构并不是真正设计用于保存在每次初始化时继续的存储引用,而是更多用于设置传入的初始值。类在这方面会更好。

关于Swift OptionSetType 重置自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33655480/

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