Swift:从函数返回类型 JSON

Posted

技术标签:

【中文标题】Swift:从函数返回类型 JSON【英文标题】:Swift: Return Type JSON from function 【发布时间】:2016-07-27 12:15:21 【问题描述】:

所以我有一个函数需要返回从 API 端点接收的 JSON 对象。由于某种原因,这个函数总是返回 nil,即使当我打印 response.result.value 时,它​​也完美地包含了 API 响应,并进入 if 语句分配给 returnJSON。希望有任何意见!

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


【问题讨论】:

为什么不将JSON解析成字典并返回字典呢?此外,在从您的 POST 请求收到结果之前,您将返回 returnJSON,因此它为零。使用块。 看看如何使用Swift Closures with Alamofire for Network requests 【参考方案1】:

Alamofire 使用异步调用,因为互联网获取总是需要一些时间。 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)

【讨论】:

以上是关于Swift:从函数返回类型 JSON的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Swift 中的函数中返回值 [重复]

我的 swift 函数的返回类型必须继承自 NSObject

将 JSON 数据从 Parse Cloud Code 返回到 Swift 中的可解码结构

用于解析 JSON 并返回字典数组的 Swift 函数

Swift 1.2:void 函数中出现意外的非 void 返回值

Swift:如何将可编码类型作为函数输入传递给编码或解码 json