SwiftyJSON-从func返回json数组

SwiftyJSON-从func返回json数组,json,swift,function,parsing,return,Json,Swift,Function,Parsing,Return,我正在开发本地json api,它可以很好地使用swiftyjson和alamofire接收和解析数据,但在返回这些数据时,我遇到了一些问题: import Alamofire import SwiftyJSON ... func getApi() -> Array<JSON> { let user = "user" let password = "password" Alamofire.request(.GET, "http://localho

我正在开发本地json api,它可以很好地使用swiftyjson和alamofire接收和解析数据,但在返回这些数据时,我遇到了一些问题:

import Alamofire
import SwiftyJSON

...

func getApi() -> Array<JSON> {

    let user = "user"
    let password = "password"

    Alamofire.request(.GET, "http://localhost/api/")
        .authenticate(user: user, password: password)
        .responseString { (req, res, body, error) in

            if let data = (body)!.dataUsingEncoding(NSUTF8StringEncoding) {

                let json = JSON(data: data)

                println(json) // works fine

                return json // does not work   
            }
    }
}
导入Alamofire
导入快捷JSON
...
func getApi()->数组{
let user=“user”
让password=“password”
请求(.GET,“http://localhost/api/")
.验证(用户:用户,密码:密码)
.responseString{(请求、回复、正文、错误)在
如果让数据=(正文)!.dataUsingEncoding(NSUTF8StringEncoding){
让json=json(数据:数据)
println(json)//工作正常
返回json//不起作用
}
}
}
所以它打印“JSON不能转换为无效”

有人知道怎么处理吗

你认为我使用alamofire进行“http基本身份验证”是正确的吗


问候和感谢

您试图在没有返回类型(Void)的块内返回JSON类型的对象。

根据您的变量名,您应该设置

res = json 


或者像这样的smt。现在无法检查,因为我现在离mac很远

您的函数返回一个JSON数组:
[JSON]

您正在尝试返回单个
JSON
type对象

更改return语句以返回数组:

return [json] // should work
编辑:当我发布我的答案时,我误读了代码。您正在调用一个异步方法Alamofire.request。该方法立即返回,但直到稍后某个时候才实际加载数据。你当前的设计不起作用。
@格温德尔的答案是正确的。您需要重构您的方法以获取一个完成块,并将响应处理放在该完成块中。

如果您的api返回一个JSON对象,alamofire将提供一个.responseJSON,swiftyJSON可以包装该响应

另外,请不要忘记此请求是异步的,因此您可能需要在完成处理程序中获得这些结果,如下所示:

func getApi(completionHandler: (jsonResponse: JSON) -> () {
    let user = "user"
    let password = "password"

    Alamofire.request(.GET, "http://localhost/api/")
        .authenticate(user: user, password: password)
        .responseJSON { (req, res, JSON, error) in

                println(json) // works fine

                completionHandler(json)
            }
    }
}
按如下方式调用该方法:

getAPI(completionHandler: { (response: JSON) -> () in
  // do something with your response. If the JSON contains an array you can iterate through it here.
}

下一个好方法是检查Alamofire文档上的“响应序列化”部分。

作者试图在Alamofire块内返回JSON类型的对象,该对象没有返回类型,因此出现Void错误。
getAPI(completionHandler: { (response: JSON) -> () in
  // do something with your response. If the JSON contains an array you can iterate through it here.
}