2016-07-27 83 views
1

所以我有一个函数需要返回从API端点接收到的JSON对象。出于某种原因,这个函数总是返回nil,即使当我打印response.result.value时,它完美地包含了API响应,并输入了要分配给returnJSON的if语句。将不胜感激任何投入!Swift:从函数返回类型JSON

func storeContact(name: String, number: String, apiToken: String) -> AnyObject? { 

var returnJSON: AnyObject? 

let contact = ["api_token" : apiToken, "name" : name, "number": number] 

Alamofire.request(.POST, "http://sample.app/api/v1/contact", parameters: contact, encoding: .JSON).responseJSON { (response) -> Void in 

    if let value = response.result.value { 

     returnJSON = value 

    } 
} 

return returnJSON 

} 
+3

你为什么不解析JSON成字典和词典回报?在从POST请求收到结果之前,您还要返回'returnJSON',因此它是零。使用块。 – NSNoob

+0

请参阅如何使用[Swift Closures with Alamofire for Network requests](http://stackoverflow.com/questions/25141829/swift-closure-with-alamofire) – NSNoob

回答

2

Alamofire使用异步调用,因为Internet抓取总是需要一些时间。完成块Alamofire.request始终调用storeContact返回值。其常见的在这种情况下使用闭包:

func storeContact(name: String, number: String, apiToken: String, completeonClosure: (AnyObject?) ->()) { 
    let contact = ["api_token" : apiToken, "name" : name, "number": number] 

    Alamofire.request(.POST, "http://sample.app/api/v1/contact", parameters: contact, encoding: .JSON).responseJSON { 
     response in 
     completeonClosure(response.result.value) 
    } 
} 

用法:

storeContact("name", number: "number", apiToken: "apiToken") { 
    returnJSON in 
    print(returnJSON) 
} 
+1

传说,该作品非常值得感谢! – frostfat