初期化
目次>
ストアされたプロパティの初期値のセット
イニシャライザ
デフォルトのプロパティ値
初期化のカスタマイズ
パラメータの初期化
ローカルと外部パラメータ名
オプションのプロパティタイプ
初期化で固定されたプロパティを修正する
デフォルトのイニシャライザ
バリュータイプのデリゲーションの初期化
クラス継承と初期化
指名のイニシャライザとコンビニエンスイニシャライザ
初期化チェーン
二段階初期化
イニシャライザの継承とオーバーライド
指名のイニシャライザとコンビニエンスイニシャライザの文法
指名のイニシャライザとコンビニエンスイニシャライザの動作
クロージャーや関数でデフォルトのプロパティ値をセットする
エクステンションで新しい初期化方法の定義ができる
継承
目次>
サブクラス化
SomeSuperclassクラスを継承してSomeClassを作成する場合
class SomeClass: SomeSuperclass { // class definition goes here }
初期化メソッドなど、上書きする場合は、superの初期化メソッドを呼び出してから
class Bicycle: Vehicle { init() { super.init() numberOfWheels = 2 } }
SwiftからObjective-Cクラスを使う - 水夫と戯れて
メソッドのオーバーライド
overrideキーワードを使う
class Car: Vehicle { var speed: Double = 0.0 init() { super.init() maxPassengers = 5 numberOfWheels = 4 } override func description() -> String { return super.description() + "; " + "traveling at \(speed) mph" } }
スーパークラスのメソッドやプロパティ、サブスクリプトへのアクセス
super.someMethod() super.someProperty super[someIndex]
プロパティのオーバーライド
プロパティのゲッター・セッターのオーバーライド
class SpeedLimitedCar: Car { override var speed: Double { get { return super.speed } set { super.speed = min(newValue, 40.0) } } }
プロパティ監視のオーバーライド
class AutomaticCar: Car { var gear = 1 override var speed: Double { didSet { gear = Int(speed / 10.0) + 1 } } override func description() -> String { return super.description() + " in gear \(gear)" } }
オーバーライドの前に
クラス
目次>
クラス名は大文字で始まる class クラス名 {}
初期化するときは var instance = ClassName()
ストラクチャ・クラスの定義
struct Resolution { var width = 0 var height = 0 } class SomeClass { // class definition goes here }
プロパティの定義
循環参照防止のために weak が必要な場合あり
weak var resolution = Resolution()
weak参照はオプショナル値
class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? }
インスタンスの作成
let someVideoMode = VideoMode()
プロパティへのアクセス
println("The width of someVideoMode is \(someVideoMode.resolution.width)")
バリュータイプ
参照タイプ
ID比較
同一かどうか (===) 同一でないかどうか (!==)
ポインタ
Strong Reference
強参照 強参照を使う場合オーナーがオブジェクトを保持する 使用する前に初期化が必要
Weak Reference
弱参照 弱参照を使う場合、ライフタイムで独立 使用する前に初期化が必要
Unowned Reference
Unowned参照を使う場合同じライフタイムでオブジェクトは保持される 使用する前に初期化が必要
Unowned Referenceを使う let holder = card.holder card.older.charge(2.19)
クラスの初期化
ifの中にだけ入っていたりする場合、ifの中に入らない場合は初期化されていない状態になるのでダメ
イニシャライザはインスタンスのすべての初期化を行う init(luckyNumber: Int, message: String){...}
ストラクチャの初期化
struct Color{
let red, green , blue: Double
init(grayScale: Double) {
red = grayScale
green = grayScale
blue = grayScale
}
}
mutating ?