Swift
1 2//製品ごとに紐付けている独自のIDからを栄養素を取得 3func foodGet(fid:String) { 4//省略 5} 6 7func tableView(tableVIew: UITableView, numberOfRowsInSection section: Int) -> Int{ 8 return nutritions.count 9} 10 11func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 12 let cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "cell") 13 let nutrition = nutritions[indexPath.row] 14 cell.textLabel?.text = nutrition["food_id"]! 15 return cell 16} 17 18//バーコードから製品ごとに紐付いている独自のIDを取得 19func foodFindIdForBarcode(barcode:String) { 20//省略 21 Alamofire.request(.GET, URL, parameters: parameters) 22 .responseJSON { response in 23 guard let object = response.result.value else { 24 return 25 } 26 let json = JSON(object) 27 json.forEach { (_, json) in 28 let nutrition: [String: String?] = [ 29 "barcode": json["barcode"].string 30 ] 31 self.nutritions.append(nutrition) 32 } 33 self.foodGet(json["barcode"] as! String) 34 self.table.reloadData() 35 36 if let JSON = response.result.value { 37 print("JSON: \(JSON)") 38 } 39 } 40 }
やりたいことは下記です。
- バーコードをスキャン
- 1で製品情報を取得し、独自のDBに保有している世界中のすべての製品ごとのIDを取得
- 2から当該製品の栄養素を取得
したがって、2(foodFindIdForBarcode)で取得したIDを3(foodGet)へ渡す必要があります。
通常のデータ型であれば下記のように値を渡すことは容易なのですが、
JSON型だとどうも上手くいきません。
swift
1self.foodGet(fid as! String)
これで2週間以上躓いております...。
下記コードだと強制終了となってしまいます。
swift
1self.foodGet(json["barcode"] as! String)
どなたかご教示ください。
よろしくお願いします!
何がどううまくいかないのでしょうか?
私の考えでは下記で上手くいくはずですが、追加スクショの通り強制終了となってしまいます。 self.foodGet(json["barcode"] as! String)
なお、0030000316498はスキャンしたバーコードナンバーです。
うまくいっている「通常のデータ型」(fid)の型を教えて下さい。あと、print(json["barcode"])の出力を教えて下さい。
String型です。
let fid = "3312535"
と宣言し、
self.foodGet(fid as! String)
で動作します。
print(json["barcode"])の出力いま初めて確認しましたが「null」でした...。
じゃあ、print(json)はどうでしょうか?
{
"food_id" : {
"value" : "3312535"
}
}
となりました!この中のvalueを取得したいんです!
回答2件
あなたの回答
tips
プレビュー