Swiftで遊ぼう! - 569 - 構造体、格納型プロパティを式で設定...2
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- 私の本業、オフィシャルなブログ-> Life-LOG
「詳解 Swift 改訂版」を超スローペースで進んでいます。
格納型プロパティの初期値を式で設定する
var familyNumber = 2127 struct Family { struct Member { var male, female: Int } static var stdMale = 3 static var stdFemale = 3 static var stdMember = Member(male: stdMale, female: stdFemale) var member: Member let serial = "FM:\(familyNumber++)" init(_ m: Int, _ f: Int) { member = Member(male: m, female: f) } }
この構造体は、構造体をネストしていて、入れ籠の構造体がインスタンスになります。しかし、タイププロパティも持っていて、同じネストされた構造体のタイププロパティも持っています。このタイププロパティの初期化ステップで注意すべきことがあります。
ちょっとplaygorundの画面で見ます。
タイププロパティは初期値,
Family.stdMaleは「3」です。これを故意に「12」に変更してからFamily.stdMemberを呼ぶと、この時点でインスタンス化されるため、変更された「12」が設定されるので、stdMemberは(male 12, female 3)になります。
しかし、Family.stdMaleを「18」に変更しても、もう既に設定されたstdMember(male 12, female 3)の値は変化しないんです。初期値の参照が呼ばれるのはタイププロパティが最初に呼ばれる時だけです。上記playgroundの行番号「24」に「Family.stdMember」と入力してタイププロパティを呼ぶと、後のすべての値が即座に変更されるでしょう。
なるほどです。
今日はこれだけ。