2020/1/12 Swift イニシャライザ(Initialization)工事中🏗

初期化(Initialization)は、クラス・構造体・列挙型のインスタンスを準備するプロセスです。このプロセスはインスタンスのストアドプロパティの初期化と、その他のインスタンスを使用するに際必要なセットアップや初期化が含まれます。

イニシャライザを定義することで初期化処理を実装します。イニシャライザは特定の型のインスタンスが生成される際呼び出される特別なメソッドです。Swiftのイニシャライザは値を返しません。イニシャライザの一番の役割は、インスタンスが初めて使われる時に正常に初期化されていることを確実にすることです。

クラス型のインスタンスはデイニシャライザを実装することもできます。デイニシャライザはクラスのインスタンスが削除(割当解除)される直前に独自のクリーンアップをします。

ストアドプロパティの初期化

クラスと構造体はインスタンスが生成される時までに、全てのストアドプロパティが適切な値で初期化されていなければなりません。ストアドプロパティの値が不確定のままの状態は許されません。

ストアドプロパティの初期化方法としては、イニシャライザによる初期化、あるいはストアドプロパティの宣言時にデフォルト値を代入する方法があります。

NOTE

イニシャライザによる初期化時、あるいは宣言時のデフォルト値の代入時は、プロパティオブザーバが呼ばれることはありません。

イニシャライザ

イニシャライザは、特定の方のインスタンス生成時に呼び出されます。一番基本的なイニシャライザの定義は以下のようにインスタンスメソッドのように定義します。

sample1-1

init() {
    // perform some initialization here
}

sample1-2ではFahrenheitで表現される温度を格納するFahrenheit構造体を定義しています。一つのDouble型のストアドプロパティtemperatureを持っています。

sample1-2

struct Fahrenheit {
    var temperature: Double
    init() {
        temperature = 32.0
    }
}
var f = Fahrenheit()
print("The default 

Swiftの基本 イニシャライザ、パート1

1.イニシャライザの基本

まずストアドプロパティtoとコンピューテドプロパティbodyを持つ構造体Greetを定義します。(sample1)

sample1

struct Greet{
    let to:String
    var body:String{
        return "Hello,\(to)!!!!!"
    }
    
    init(to:String){  //←がイニシャライザ
        self.to=to
    }
}

init(引数){初期化処理}

の部分がイニシャライザの定義。

次に構造体Greetのインスタンスを生成します。(sample2)

sample2

struct Greet{
    let to:String
    var body:String{
        return "Hello,\(to)!!!!!"
    }
    
    init(to:String){
        self.to=to
    }
}

let gr1=Greet(to:"address1")  //インスタンス生成。この時自動的に
                              //イニシャライザが実行される。

print(gr1.body)
Hello,address1!!!!!