Struct Swift 3:如何将所有结构属性设置为零

Struct Swift 3:如何将所有结构属性设置为零,struct,swift3,Struct,Swift3,是否有更好的方法将所有结构属性设置为nil,而不是手动将每个属性设置为nil 如果我有一个Hello结构 struct Hello { var salutation: String? var name: String? } let hello = Hello(salutation: "Mr.", name: "James") 目前,我正在执行此操作以重置值: func removeAll() { salutation = nil name = nil }

是否有更好的方法将所有结构属性设置为nil,而不是手动将每个属性设置为nil

如果我有一个Hello结构

struct Hello {
    var salutation: String?
    var name: String?

}

let hello = Hello(salutation: "Mr.", name: "James")
目前,我正在执行此操作以重置值:

func removeAll() {
    salutation = nil
    name = nil
}
我正在寻找一种更好的方法,尤其是当结构很大的时候

我看到一些使用镜像的建议,但出现错误“无法分配给属性:“$0”是不可变的”


谢谢你的帮助

用新实例替换结构实例。例如:

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

将结构实例替换为新实例。例如:

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

嗨,马特,在操场上一切正常,但在Xcode中,我得到了警告:
可选类型的值Hello?没有打开包装;你是想用它吗!或者?
使用“!”安全吗在这里我添加了变异函数,就像你的例子一样。我不知道你的“在Xcode内”代码是什么样子。我向你保证,我所说的不会导致“可选类型<代码>你好?”,所以这一定是你自己添加的一些复杂因素。是的,我猜可能是这样。嗨,马特,在操场上,这很好,但在Xcode中,我得到警告:<代码>可选类型的值你好?没有打开包装;你是想用它吗!或者?使用“!”安全吗在这里我添加了变异函数,就像你的例子一样。我不知道你的“在Xcode内”代码是什么样子。我向你保证,我所说的不会导致“可选类型<代码>你好?”,所以这一定是你自己添加的一些复杂因素。是的,我猜可能是这样的。