2016-06-25 5 views
0

Appleのdocumentation状態:StructsとClassesでどのようにストアドプロパティを初期化する必要がありますか?

クラスと構造体は、そのクラスのインスタンスまたは 構造が作成された時点で 適切な初期値にその保存されたすべてのプロパティを設定する必要があります。格納されたプロパティは、 不定状態のままにすることはできません。

私もthisの質問を見ましたが、それでも答えを見つけることができませんでした。

// struct 

    struct FlickrObj { // No Error ???? 
     var title : String 
     var photographer : String 

    } 

// class 

class FlickrObj { // will create error: Class 'FlickrObj' has no initializers 
    var title : String 
    var photographer : String 

} 

Appleは両方のクラスと構造体は、その保存されたプロパティを設定する必要がありますが、なぜ構造体は、任意のコンパイル時のエラーを与えるものではありませんと言う?

+2

[memberwise initialisers for structs]のドキュメントを参照してください(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097- CH18-ID213) – Hamish

+1

または私のオンラインブック:http://www.apeth.com/swiftBook/ch04.html#_struct_initializers_properties_and_methods – matt

+0

誰かが私を教えてくれますか?これは悪い質問ですか?私は、SOに類似の質問があった場合、それは悪いことを意味します。その回答がドキュメンテーションから得られたという理由だけでは、それは明らかではありません。そして、たとえそれがドキュメントであっても、多くの良い答えが抽出されます。 2つの非常に似たような方法を見て、エラーを出すものとエラーを出さないものを混乱させる。 – Honey

答えて

1

いずれかの不存在下で明示的に初期化子を宣言し、ためです、構造体自体は暗黙的なメンバーワイズ初期化子init(title:photographer:)を宣言します。

しかし、クラスはそうしません。

したがって、クラスは初期化規約(すべてのインスタンスプロパティを初期化してからインスタンス自体が終了する前に初期化する必要があります)を実行できませんが、構造体が契約に失敗していません。

+0

クラスでメンバーシップイニシャライザの容易さと利便性を提供できない何らかの理由はありますか? – Honey

+1

クラス継承のもとでどのように動作するのか考えてみてください... – matt

関連する問題