2016-09-21 6 views
-3

Swiftで私のクラスを以下のように作成しました。 Swiftの奇妙なオプションの動作

class Product: NSObject { 

    var product_id:Int? 
    var product_number:String? 
    var product_price:Float? 
    var product_descrption:String? 
} 

は今、私はこの

 let p=Product() 
     p.product_id=1 
     p.product_price=220.22 
     p.productdescrption="Some description" 
     p.product_number="W2_23_233" 

のように各プロパティに値を設定していますが、私は価格のため、その後の価格から値を取得するとき、私は「オプションの220.22」のような値を取得するしかし、私はしないでくださいフロートの値をアンラップするために 『!「私はを追加しました。だから、これを解決するために、』説明に追加単語「オプション」を取得するが、私はStrinのためにこれを行う必要はありませんでしたgなぜこれが起こっているのか教えてください。

+1

あなたがその文字列のために使用している関数はどれもunwrapされていない値を必要としないので、値をnilにすることができる場合にのみ宣言する必要があります。使用しない場合は – Tj3n

+1

'p.product_number'を印刷すると、' optional'でも印刷されます。 –

+0

私はなぜ誰かがそれを投票した理由を理解していない。 –

答えて

0

これらの値のいずれかを印刷する場合は、オプション(...)とします。オプション(...)を含まないラベルに値を割り当てる場合、print()を使用して値を印刷するときにオプション(...)を示す理由は、オプション。安全のために!を使用する代わりに、ifを使用してみてください。

ます。また、一度にすべてを行うために、それらを組み合わせることができ、あなたのコード、

if let id = p.product_id { 
    print(id) //Does not contain Optional() 
} 

例。あなたが迅速な3上にない場合、私はあなただけの最初の条件に聞かせて記述する必要が信じて、ノート

if let id = p.product_id, 
    let price = p.product_price, 
    let description = p.productdescrption, 
    let productNumber = p.product_number { 
     //Enter code here that does something with these values 
} 

を(あなたはすべての値が非ゼロでない限り、印刷しない場合にのみ、これを行います) 。

0

任意のタイプの変数をアンラッピングしないで出力すると、その変数の値にOptionalが追加されます。

print(p.product_price)オプション(220.220001)

print(p.product_descrption)はオプションの変数をアンラップする必要がある唯一の値を印刷するにはオプション( "いくつかの記述")

を印刷します印刷します。

print(p.product_price!)220.22

print(p.product_descrption!)を印刷しますoptionalsがnilが含まれていない場合は、この強制アンラップにのみ機能しますいくつかの説明

を印刷します。そうしないと、実行時エラーが発生します。 nilを確認するには、if letステートメントを使用できます。

0

変数の種類に関係なく。オプションの変数に値を割り当てた場合、それは常に強制アンラップなし

オプションオプション(...)で囲ま:

print("product_price = \(p.product_price) \n product_descrption = \(p.product_descrption)") 

出力:
PRODUCT_PRICE =オプション(220。22)
product_descrption =オプション(一部記述)強制アンラップと

オプション:

print("product_price = \(p.product_price!) \n product_descrption = \(p.product_descrption!)") 

出力:あなたはアンラップする必要はありませんでした
PRODUCT_PRICE = 220.22
product_descrption =いくつかの説明