2017-02-09 38 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

相關問題