gpt4 book ai didi

swift - swift 从 http sendAsyncRequest 调用中返回数据

转载 作者:行者123 更新时间:2023-11-28 13:11:26 24 4
gpt4 key购买 nike

好的,首先,我已经阅读了关于该主题的其他几篇文章,并且我知道我要描述的可能是同步调用,但我真正需要的是获取数据并使用它,所以如果我应该看看其他方向让我知道:

我必须调用 api 来检索 json 对象并使用它们来填充 TableView 。我的问题是我无法设法传递/返回数据以使用它:

在 Controller 中:

callProjectTypes()
var testjson = JSON(data:test)
println("should print some data")
println(testjson[0])

调用函数:

func callProjectTypes() -> (NSData) {

var data = NSData()

serverCall("http://url/to/project/types") {
responseData, error in

if responseString == nil {
println("Error during post: \(error)")
return
}

// use responseData here
data = responseData
}

return data

}

func serverCall(url: String, completionHandler: (responseData: NSData!, error: NSError!) -> ()) {
var URL: NSURL = NSURL(string: url)!
var request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "GET";

var creds = encodeCredentials()
request.addValue("\(creds)", forHTTPHeaderField: "Authorization")

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){

response, data, error in

var output: NSData!

if data != nil {
output = data
}

completionHandler(responseString: output, error: error)
}
}

println(testjson[0]) 总是返回“nill”,所以我假设 callProjectTypes 中的“return data 函数在数据到达之前返回。

我应该怎么做才能使这项工作正常进行?

最佳答案

要异步返回值,您不能使用 return 语句,因为您无法保证在执行 return 语句时“serverCall”已经完成。相反,您必须以异步方式返回“数据”值,例如通过向“callProjectTypes”本身提供回调。示例:

callProjectTypes()
{
(data : NSData) in
let testjson = JSON(data:data)
println("should print some data")
println(testjson[0])
}

异步函数必须接受并执行回调:

func callProjectTypes(callback: (data : NSData)->Void)
{
serverCall("http://url/to/project/types") {
responseData, error in

callback(responseData)
}

现在你可以保证回调中的代码只会在'serverCall'返回数据后执行。

关于swift - swift 从 http sendAsyncRequest 调用中返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com