2016-07-14 2 views
0

item2という変数を設定するとコード行に問題があり、nameプロパティがオプションの場合にこの初期化ができないのはなぜですか?このコードSwiftのデフォルトイニシャライザを使用してオプションのプロパティ値を変更する3

ShoppingListItem(name:"Orange Juice") 

class ShoppingListItem { 
    var name: String? 
    var quantity = 1 
    var purchased = false 
} 

var item = ShoppingListItem() 
var item2 = ShoppingListItem(name:"Orange Juice") 

print(item.name) 
print(item2.name) 
+2

オプションについて:実生活で何個の無名買い物リスト項目がありますか? ;-) – vadian

答えて

3

あなたは存在しないShoppingListItemの初期化子を呼び出しています。

だから彼らは独自のカスタム初期化子のいずれかを定義しない 場合

class ShoppingListItem { 
    var name: String? 
    var quantity = 1 
    var purchased = false 

    init(name:String) { 
     self.name = name 
    } 

    init() { } 
} 
1

Memberwise Initializers for Structure Types

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

メンバワイズイニシャライザは、メンバ の新しい構造体インスタンスを初期化するための簡略化された方法です。新しいインスタンスの プロパティの初期値は、初期設定のメンバー名 に渡すことができます。

以下の例では、幅と高さという2つのプロパティ を持つサイズという構造を定義しています。両方のプロパティは、タイプが であると推測されます。デフォルト値の0.0を割り当てます。

サイズ構造は自動的に初期化(幅受け取り:あなたは初期化子を追加する必要があなたのコードで

struct Size { 
    var width = 0.0, height = 0.0 
} 

let twoByTwo = Size(width: 2.0, height: 2.0) 
+0

この投稿にあなた自身を追加してください。 –

+0

すべての答えは、Swiftのマニュアルからまっすぐです。質問のコードさえもドキュメントにあります。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html – Asdrubal

+2

受け入れられる回答には、質問のコードとポスターの説明が使用されます。これは構造体に関するドキュメントでもあります。問題のコードはクラスを使用します。 –

1

:あなたは新しいサイズ インスタンスを初期化するために使用することができ、高さ:) memberwise初期化子を、

class ShoppingListItem { 
    var name: String? 
    var quantity = 1 
    var purchased = false 
} 

var item2 = ShoppingListItem() 
item2.name = "Orange Juice" 

print(item2.name) 
+0

実際には、値の不在を表す 'name'に空の' String'を代入しています。無価値の概念を表現するには、常に 'nil'を使うべきです。 –

+0

はい、あなたは正しいです、thnx – Igor

+0

メソッドを持つかどうかは、Swiftで 'class'と' struct'を選択することとは関係ありません。 – andyvn22

関連する問題