2016-08-11 4 views
0

初心者、PHPから来ています。穏やかな。なぜイニシャライザを使用するのですか?

はここで初期化子

struct Book { 
    let title: String 
    let author: String 
    let price: String 
    let pubDate: String 

    init(title: String, author: String, price: String, pubDate: String){ 
     self.title = title 
     self.author = author 
     self.price = price 
     self.pubDate = pubDate 
    } 

} 

let HarryPotter = Book(title: "Harry Potter", author: "JK Rowling", 
         price: "30$", pubDate: "January 10th, 1998") 

と迅速な構造体だし、ここで、これらは両方とも同じことを行う場合は初期化子

struct Book { 
    let title: String 
    let author: String 
    let price: String 
    let pubDate: String 
} 

let HarryPotter = Book(title: "Harry Potter", author: "JK Rowling", 
         price: "30$", pubDate: "January 10th, 1998") 

せずに迅速な構造体だし、初期化子を使用する利点は何ですか?

答えて

3

2番目のケースでは、まだイニシャライザを使用しています。自分で指定していないために生成されたdefault initializerを使用しています。

Swiftは、すべてのプロパティのデフォルト値を提供する構造体またはクラスのデフォルト初期化子を提供し、少なくとも1つの初期化子自体は提供しません。デフォルトイニシャライザは、すべてのプロパティがデフォルト値に設定された新しいインスタンスを作成するだけです。

初期化の一般的な質問に答えるには、インスタンスの初期化をカプセル化し、「ハーフベイクド」状態でインスタンスを取得できないことを保証します。彼らはSwiftのPHP Constructorsに相当します。

1

あなたの具体的なケースでは、何もしません。あなたのイニシャライザーがやっていることは値の設定です。しかし、実際に何かを行うイニシャライザに他のコードを書くことは可能かもしれません。

0

事前にロジックを含める場合は、コンストラクタ/初期化子でそれを行うことができます。

-1

私はSwiftではなくRuby開発者ですから、これは少し推測ですが、引数値をインスタンスに割り当てるだけでなく、(任意の)コードをイニシャライザの内側で実行したいときもあります変数。例:

def initialize(attr) 
    @attr = attr 
    puts "I'm initializing!" 
end 

上記の場合、属性を割り当ててstdoutに出力しました。スウィフトで推測しているのは、属性の割り当てが自動的に行われているため、属性を割り当てるだけであれば、自分でイニシャライザを作成するのを避け、Swiftに処理させることができます。

関連する問題