- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,首先,我已经阅读了关于该主题的其他几篇文章,并且我知道我要描述的可能是同步调用,但我真正需要的是获取数据并使用它,所以如果我应该看看其他方向让我知道:
我必须调用 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/
如果 initWithRequest 和 sendAsyncRequest 都是异步连接方式,那么主要区别是什么? 除了 sendAsyncReq 中的完成处理程序和队列概念还有什么?哪一个更有优势?
好的,首先,我已经阅读了关于该主题的其他几篇文章,并且我知道我要描述的可能是同步调用,但我真正需要的是获取数据并使用它,所以如果我应该看看其他方向让我知道: 我必须调用 api 来检索 json 对象
我是一名优秀的程序员,十分优秀!