хочу создать OptionSetType с пользовательское свойство добавляется в структуры:Swift 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 в 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)
Сбрасывает структуру. Есть ли способ сохранить сохраненное значение?
Спасибо за ваш ответ. Я знаю, что structs являются типами значений, но обычно, когда вы вызываете метод 'mutating' на struct, все значения в структуре также будут скопированы. Для 'OptionSetType' это не тот случай, когда вы вызываете' insert'. Единственный способ, которым я могу придумать эту работу, - создать оболочку, содержащую структуру 'Options', но мне бы очень понравилось более чистое решение – floorish