###前提・実現したいこと
Alamofire+SwiftyJSONを利用して、APIからデータを取得・パースして、returnで戻したい。
###発生している問題・エラーメッセージ
return値が変数を初期化した際の物([])が返却される。
returnされた後にAlamofireの処理を行っている模様(以下のログを参照)
###該当のソースコード
APIの処理元
swift
1import Foundation 2import Alamofire 3import SwiftyJSON 4 5class CardApi { 6 let email = AppSetting.email 7 let token = AppSetting.token 8 let host = Constants.Api.host 9 var cards: [[String: String?]] = [] 10 11 func getCardList() -> [[String: String?]] { 12 let url = host + "/card" 13 let params = [ 14 "email" : email, 15 "token" : token 16 ] 17 18 Alamofire.request(.GET, url, parameters: params) 19 .responseJSON{ response in 20 guard let object = response.result.value else { 21 return 22 } 23 24 let json = JSON(object) 25 json.forEach { (_, json) in 26 let card: [String: String?] = [ 27 "id" : json["id"].description, 28 "description" : json["description"].string 29 ] 30 self.cards.append(card) 31 } 32 } 33 return cards 34 } 35}
APIクラスの呼び出し元
swift
1import UIKit 2 3class HomeViewController: UIViewController { 4 5 @IBOutlet weak var userEmail: UILabel! 6 @IBOutlet weak var userToken: UILabel! 7 let cardApi = CardApi() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 userEmail.text = AppSetting.email 12 userToken.text = AppSetting.token 13 14 print(NSDate()) 15 print("呼んだよ") 16 print(cardApi.getCardList()) 17 print(NSDate()) 18 print("終わり") 19 // Do any additional setup after loading the view. 20 } 21 22 override func didReceiveMemoryWarning(){ 23 super.didReceiveMemoryWarning() 24 // Dispose of any resources that can be recreated. 25 } 26}
###試したログ
2016-08-30 23:33:25 +0000 呼んだよ [] 2016-08-30 23:33:25 +0000 終わり [["id": Optional("1"), "description": Optional("あああああああああ")]] [["id": Optional("1"), "description": Optional("あああああああああ")], ["id": Optional("2"), "description": Optional("いいいいいいいいいいい")]]
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
- Xcode: 7.3.1
- Swift: 2.2
- Alamofire: 3.4.2
- SwiftyJSON: 2.3.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/31 01:40
2016/08/31 03:16 編集