SwiftyJSON-从func返回json数组
我正在开发本地json api,它可以很好地使用swiftyjson和alamofire接收和解析数据,但在返回这些数据时,我遇到了一些问题: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
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.
}