###前提・実現したいこと
Swiftで栄養管理アプリを作っています。
処理の流れとしては下記の通りで、今回3のところで行き詰まっています。
- カメラでバーコード番号読み取り
- バーコード番号をもとにAPIから製品IDを取得
- 製品IDをもとにAPIから栄養パラメータを取得
- 画面遷移
- 4と同時に、3の栄養パラメータをもとにライブラリでグラフを作成
###発生している問題・エラーメッセージ
Alamofire(APIとの通信)内では栄養パラメータのひとつを取得できているのですが、
Alamofire外で同じパラメータを表示させようとすると "nil" となってしまいます。
Alamofire外でvitamin_c:nil Alamofire内でvitamin_c:Optional("10")
また、投稿内容から少しずれるかもしれませんが、
Alamofire内においても値(10)のみ取得したいです。
Optional("")が付随してしまうのはAlamofireの仕様上やむを得ないのでしょうか。
そうであれば文字列変換処理でOptional("")の部分を削除するようにします。
###該当のソースコード
swift
1public class nutritionDisplayViewController: UIViewController, ChartViewDelegate { 2 3 @IBOutlet weak var barChartView: BarChartView! 4 5 var nutritions: [[String: String?]] = [] //APIとの通信に用いるパラメータ 6 7 //@IBOutlet weak var idLabel: UILabel! 8 override public func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11 12 //グラフ作成ライブラリChartsを用いたグラフ作成処理 13 setChart(parameter, values: unitsSold) 14 //省略 15 } 16 17 //カメラで読み取ったバーコード番号を投げて製品特有のAPI独自ID(food_id)を取得する関数 18 public func foodFindIdForBarcode(scannedBarcode:String) { 19 20 //省略 21 foodGet(food_id) 22 } 23 24 // 製品特有のAPI独自IDを投げて栄養パラメータを取得する関数 25 public func foodGet(fid:String) { 26 27 let URL = "http://platform.fatsecret.com/rest/server.api" 28 var parameters = [String: String]() 29 30 parameters["format"] = "json" 31 parameters["food_id"] = fid //製品特有のAPI独自ID 32 33 parameters["method"] = "food.get" 34 35 //OAuth関連のパラメータ設定 36 //省略 37 38 var vitamin_c: String? 39 40 Alamofire.request(.GET, URL, parameters: parameters) 41 .responseJSON { response in 42 guard let object = response.result.value else { 43 return 44 } 45 let json = JSON(object) 46 json.forEach { (_, json) in 47 let nutrition: [String: String?] = 48 ["food_id": json["food_id"]["value"].string, 49 "vitamin_c": json["food"]["servings"]["serving"]["vitamin_c"].string 50 ] 51 self.nutritions.append(nutrition) 52 } 53 54 vitamin_c = json["food"]["servings"]["serving"]["vitamin_c"].string! 55 56 print("Alamofire内でvitamin_c:\(vitamin_c)") 57 } 58 print("Alamofire外でvitamin_c:\(vitamin_c)") 59 } 60 61 override public func viewDidAppear(animated: Bool) { 62 63 } 64 65 /*------- Charts -------*/ 66 func setChart(dataPoints: [String], values: [Double]) { 67 //省略 68 } 69 70 /*------- OAuth --------*/ 71 public func oauthSignatureForMethod(method: String, url: NSURL, parameters: Dictionary<String, String>) -> String { 72 //省略 73 } 74}
###試したこと
- Alamofire内でグラフを作成しようと試みましたが、画面遷移の都合上できないことに気づき諦めました。
- appDelegateに該当のパラメータを一時保存する形を試みましたが、やはり" nil "となってしまいます。
###補足情報(言語/FW/ツール等のバージョンなど)
利用したライブラリとバージョン情報
Alamofire:3.4
Charts:2.2.5
SwiftyJSON
宜しくお願いします!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 04:33
2016/09/21 04:52
2016/09/21 04:55 編集
2016/09/21 07:25