- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个带有自定义属性的 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)的方法 insert
或 remove
时,自定义属性都会重置:
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/
假设我有以下 OptionSetType struct Modifier : OptionSetType { typealias RawValue = Int var rawValue
我想创建一个带有自定义属性的 OptionSetType: struct Options: OptionSetType { let rawValue: Int init(rawValu
我有一个名为 ProgrammingLanguage 的枚举: enum ProgrammingLanguage { case Swift, Haskell, Scala } 现在我有一个名为 P
我试图弄清楚 OptionSetType 协议(protocol),但我有一些基本问题。 1)options是Array类型还是Set类型? 2) 我可以使用 for...in 循环或 for 循环访
我在自己的文件中定义了这个结构,想在其他地方和测试中使用它。 struct UserPermissions : OptionSetType { let rawValue: UInt s
鉴于以下情况: struct Weekdays: OptionSetType { let rawValue: Int init(rawValue: Int) { self.rawVal
我有一个 struct Person extends OptionSetType。在后面的代码中,如何使用 switch 语句来检查 Person 的实例是否有多个值? 谢谢 struct Perso
Swift 的 OptionSetType 协议(protocol)的目的是什么,它与仅仅利用 Set 来获取那些 SetAlgebraType 方法有何不同? 最佳答案 我将从使用OptionSet
在 Swift 1.2 之前,您可以在位掩码上执行 ~ (NOT): bitmask = ~otherBitmask 但是在 Swift 2.0 中,位掩码现在是 OptionSetType 并且您不
我在 Swift 中有一个自定义的 OptionSetType 结构。如何枚举实例的所有值? 这是我的 OptionSetType: struct WeekdaySet: OptionSetType
struct TimeMark: OptionSetType { private enum TimeMark : Int,CustomStringConvertible { case Head
在我的 Swift 类中,我为实现选项定义了一个 OptionSetType。 struct FulfillmentOption : OptionSetType { let rawValue:
我是一名优秀的程序员,十分优秀!