2017-02-09 37 views
0

是否有更好的方法来设置所有结构属性为零而不是手动设置每个属性为零?Swift 3:如何设置所有结构属性为零

如果我有一个Hello结构

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

} 

let hello = Hello(salutation: "Mr.", name: "James") 

目前,我这样做是为了重置值:

func removeAll() { 
    salutation = nil 
    name = nil 
} 

我有点找到一个更好的办法,特别是当结构是很大的。

我看到一些建议使用镜子,但我得到了错误“无法分配财产:‘$ 0’是不可改变的”

func removeAll() { 

     let mirror = Mirror(reflecting: self) 

     let properties = mirror.children.flatMap { $0.value = nil } 
    } 

感谢您的帮助!

回答

0

用新的替换结构实例。示例:

var hello = Hello(salutation: "Mr.", name: "James") 
// ... use it for a while ... 
hello = Hello() // bingo! 

所有可选属性现在重置为nil

你甚至允许内你好从做到这一点,用干净副本替换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 
+0

马特嗨,操场很不错,但在Xcode中,我得到了警告:'的可选值输入Hello?不打开;你的意思是使用!或?' 使用'!'安全吗?这里? 我像你的例子一样添加了变异的func。 – Vina

+0

我不知道你的“在Xcode中”的代码是什么样的。我向你保证,我说的会导致一个“可选类型'Hello?'”,所以它肯定是你自己添加的一些复杂因素。 – matt

+0

对不起刚才意识到,我有一个init?()函数... – Vina

相关问题