是否有更好的方法将所有struct属性设置为nil,而不是手动将每个属性设置为nil?
如果我有一个Hello结构
struct Hello {
var salutation: String?
var name: String?
}
let hello = Hello(salutation: "Mr.", name: "James")
目前我这样做是为了重置值:
func removeAll() {
salutation = nil
name = nil
}
我有点找到一种更好的方法,特别是当结构很大时。
我看到一些使用Mirror的建议,但我收到错误“无法分配给属性:'$ 0'是不可变的”
func removeAll() {
let mirror = Mirror(reflecting: self)
let properties = mirror.children.flatMap { $0.value = nil }
}
感谢您的帮助!
答案 0 :(得分:2)
用新的实例替换struct实例。例如:
var hello = Hello(salutation: "Mr.", name: "James")
// ... use it for a while ...
hello = Hello() // bingo!
现在,所有可选属性都已重置为nil
。
您甚至可以通过在 Hello中执行此操作,将self
替换为干净的副本:
struct Hello {
var salutation: String?
var name: String?
mutating func removeAll() {
self = Hello()
}
}
var hello = Hello(salutation: "Mr.", name: "James")
// ... use it for a while ...
hello.removeAll() // bingo