質問: newValue } } }
回答: > > 僕の認識ではクラスBの最初のoverrideの意味はこのクラスでは(サブクラスでは)num1をinternalとして扱い値を変更後、文字列"newValue"を出力するという事なのですが合っているでしょうか? > > > こちらは認識の通りかと思います。 classAのnum1は同じソースファイルからしかアクセスできませんが、classBのnum1は同じモジュールのソースファイルからアクセス可能です。 classBのnum1に値を設定「B().num1 = 10」とすると"newValue"が呼ばれます。 > > クラスBの二番目のoverrideはnum2のgetをinternalにし、setをprivateとして参照時1を足してを出力し変更時に変更する値を代入する、でよろしいでしょうか? > > > こちらも書いてあることは合っていると思います。 しかしこのコードの書き方は実行時にアプリが落ちます。 まずは以下の記事を一読してプロパティの概要を知ることが良いと思います。 Swift ストアドプロパティ(Stored Property) コンピューテッド・プロパティ(Computed Property) ``` // 以下の様に b.num2にアクセス時落ちます。 let b = B() print(b.num2) // こちらはStored Property(自分自身に値を保持します。) private var num2 = 2 // こちらはComputed Property(他の変数に対して値の設定、取得をします。) // getterの呼び出しが循環してしまって落ちています。 override internal private(set) var num2: Int { get { return self.num2 + 1 } set { self.num2 = newValue } } // 書き直すのであれば親クラスのnum2に値を設定します。 override internal private(set) var num2: Int { get { return super.num2 + 1 } set { super.num2 = newValue } } ``` > > 二番目のoverrideでsetは明示するのになぜgetはinternal(get)と書かないのでしょうか? > > > デフォルトがinternalなので書く必要が無いということです。setterはあえてprivateにしている為に書いています。