2017-09-08 12 views
-1

私は現在、アップルのiBookから迅速に選択肢を学習しており、エクササイズで少し問題があります。以下の指示があります。Swiftの関数で辞書から値を返す

購入するアプリを作成しているとします。購入するアイテムの名前を取得し、そのアイテムのコストを返す関数を記述します。関数の本体で、辞書の在庫にアクセスして商品が在庫にあるかどうかを確認します。そうであれば、辞書価格でアクセスしてアイテムの価格を返します。アイテムが在庫切れの場合は、nilを返します。関数を呼び出し、下の辞書にあるStringを渡します。戻り値を出力します。

var prices = ["Chips": 2.99, "Donuts": 1.89, "Juice": 3.99, "Apple": 0.50, "Banana": 0.25, "Broccoli": 0.99] 
var stock = ["Chips": 4, "Donuts": 0, "Juice": 12, "Apple": 6, "Banana": 6, "Broccoli": 3] 

func costOfItem(item: String) -> Double? { 
    var names = stock.keys 
    var amount = stock.values 

    for (names, amount) in stock { 
     if amount == 0 { 
      return nil 
     } 
    } 
} 
costOfItem(item: "Chips") 

私は本当にどこここから行くするかわかりません。この本では、オプションは私にとって非常に混乱した単位でした。私は二倍になる価格を返さなければならないことを知っています。私はちょうど価格辞書に入り、それを外挿し返す方法を知らない。私はオンラインで(文字列を比較する.containsメソッドを使用して)検索するいくつかの方法を試しました。誰かが私にこの運動を通して歩いてもらえますか?私は本当にこの話題を理解したい。

答えて

1

ループは必要ありません。そして、namesamount変数の最初のペアは必要ありません。 itemの名前を使用して在庫数を取得してください。ゼロでない場合は、prices辞書から費用を取得します。

var prices = ["Chips": 2.99, "Donuts": 1.89, "Juice": 3.99, "Apple": 0.50, "Banana": 0.25, "Broccoli": 0.99] 
var stock = ["Chips": 4, "Donuts": 0, "Juice": 12, "Apple": 6, "Banana": 6, "Broccoli": 3] 

func costOfItem(item: String) -> Double? { 
    if let available = stock[item] { 
     if available == 0 { 
      // none available 
      return nil 
     } else { 
      // return the price 
      return prices[item] 
     } 
    } else { 
     // unknown item 
     return nil 
    } 
} 
+0

私はコードを使用する際には、この過酷な習慣があります。私のような初心者のためにそれを簡素化してくれてありがとう! – fbrej2

関連する問題