2017-02-09 7 views
0

各プロパティを手動でnilに設定するよりも、すべての構造体プロパティをnilに設定する方が良いでしょうか?私はハロー構造体にSwift 3:すべての構造体プロパティをnilに設定する方法

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

structインスタンスを新しいインスタンスに置き換えます。例:

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の中に、私は警告を得た: '値を、オプションのこんにちは?アンラップされていない。あなたは使用するつもりでした!または? ' '! 'を使用しても安全ですか?ここに? 私はあなたの例のように変異funcを追加しました。 – Vina

+0

あなたの「Xcode内」コードがどのように見えるのか分かりません。私は、あなたが "オプションのタイプの" Hello? "という結果になると言ったことについては何もないので、あなた自身が追加したいくつかの合併症でなければなりません。 – matt

+0

申し訳ありませんが、私はinit()関数を持っています... – Vina

関連する問題