structを利用したコードを書いていたのですが、想定通りに動かなかったので質問します。
まず、structを以下のように書きました。
swift
1struct Item { 2 let name: String! 3 4 static let items: [Item] = { 5 // デバッグ用(毎回実行されていない?) 6 print("called") 7 8 return [ 9 Item( 10 name: "test1" 11 ), 12 Item( 13 name: UserDefaults.standard.bool(forKey: "is_true") ? "true" : "false" 14 ) 15 ] 16 }() 17}
Item.items
をコールするたびにlet items~
以下に記載したコードが実行されることを想定して、
コール時のUserDefaultsに保存されている値に応じてvalueを変えたいと思っていました。
そこで別ファイルから以下のようにコールします。
そうすると2回目以降でデバッグ用に仕込んだprintログが出ていないことに気付きました。
swift
1// 1回目 calledが出力される 2Item.items 3 4// UserDefaultに仕込んだ値を変更する処理が入る想定 5 6// 2回目 calledが出力されない 7Item.items
そもそもstructをこのように使うというのが間違っている気もしているのですが、このような現象(Item.itemsを使っても実際のコードが毎回実行されるわけではないように見える)はどうして発生するのでしょうか?
Swiftの基本がわかっていない初心者の質問で恐縮ですが、教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。