Swift 3:如何将所有struct属性设置为nil

时间:2017-02-09 02:31:04

标签: struct swift3

是否有更好的方法将所有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 }
    }

感谢您的帮助!

1 个答案:

答案 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