2016-06-21 13 views
2

メソッドを指定しなくても、次のコードブロックは正常に動作します。この場合、メソッドはどのような目的のために役立ちますか?なぜinitメソッドを指定する必要がありますか?

struct Person { 
    var name: String 
    var age: Int 

    init(name: String, age: Int){ 
     self.name = name 
     self.age = age 
    } 

} 

let somePerson = Person(name: "Sam", age: 21) 
somePerson.name 
somePerson.age 

ありがとうございました。

答えて

1

これは、Structの迅速な動作です。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

で見る(構造タイプ用Memberwise初期化子)「彼らは独自のカスタム初期化子のいずれかを定義しない 場合は構造タイプが自動的にmemberwise初期化子を受ける。 デフォルト初期化子とは異なり、構造が受け取りますメンバーワイヤイニシャライザ でも、既定値を持たないプロパティを格納しています。

memberwise initメソッドを指定しないと、作成されます。あなたが宣言するinitは単純なinitよりも多くのことを可能にします。例えば:

struct Person { 
    var name: String 
    var age: Int 

    init(name: String, age: Int){ 
     self.name = name.uppercaseString() 
     self.age = age + 22 
     //and more works ... 
    } 

} 
1

としては

Swift initializers

スウィフトは、任意の構造または 、そのプロパティのすべてのデフォルト値を提供しないことクラスのデフォルトの初期化を提供し、このドキュメントで指摘します少なくとも1つのイニシャライザ自体を に提供してください。デフォルトの初期化子 は、すべてのプロパティがデフォルトの の値に設定された新しいインスタンスを作成します。

独自のカスタムイニシャライザを定義していない場合、構造体型は自動的にメンバーワイヤイニシャライザを受け取ります。デフォルトの イニシャライザとは異なり、 にデフォルト値を持たないプロパティが格納されていても、構造体はメンバーワイドイニシャライザを受け取ります。

したがって、1つのinitメソッドを記述する場合は、デフォルトイニシャライザを作成する必要があります。

デフォルトのイニシャライザが必要な場合は省略できます。

+0

... *これはデフォルト値を提供しています*は、実際問題ではありません。 – vadian

+0

はい、関連するセクションを含めるように拡張しました... –

0

あなたはそれを必要としません(それ以上)。 Memberwise初期化はSwift 2.2の新機能です。著者はSwiftの以前のバージョン用にこのコードを書いたか、それがもはや必要でないことを知らなかった。

関連する問題