Swift 我怎样才能等到下载完成?
我的想法很简单: 1.我有一个带按钮的ViewController 2.点击按钮后,我想从我的网站获取数据 3.我想输入有关正在下载的数据的指示信息 4.完成后显示消息“OK”或“NOT OK” 我有一节课 类CCClass{Swift 我怎样才能等到下载完成?,swift,swift2,Swift,Swift2,我的想法很简单: 1.我有一个带按钮的ViewController 2.点击按钮后,我想从我的网站获取数据 3.我想输入有关正在下载的数据的指示信息 4.完成后显示消息“OK”或“NOT OK” 我有一节课 类CCClass{ let CCClass BaseURL: NSURL? var seed: String? init() { CCClassBaseURL = NSURL(string: "mysiteblabla") } func getData() { if le
let CCClass BaseURL: NSURL?
var seed: String?
init() {
CCClassBaseURL = NSURL(string: "mysiteblabla")
}
func getData() {
if let CCClassURL = NSURL(string: "", relativeToURL: CCClassBaseURL ) {
let networkOperation = NetworkOperation(url: CCClassURL)
networkOperation.downloadJSONFromURL {
(let JSONDictionary) in
print(JSONDictionary?["seed"])
self.seed = JSONDictionary?["seed"] as? String
}
} else {
print("Cold not construct a valid URL")
}
}
}
按一下我的按钮
let ccClass = CCClass()
ccClass.getData() {
(let test) in
dispatch_async(dispatch_get_main_queue()) {
// go to something on the main thread
print(ccClass.seed)
}
}
我有一个错误:无法使用类型为“(()->”的参数列表调用“getData”
我不确定是否应该在函数getData中创建数组并返回到主线程?数据下载后,我想用这个来下一个http查询 您正在调用带有尾随闭包的
getData
,但是getData
的定义不接受闭包参数(或调用它)。如果您更改方法以获取闭包并使用它(可能是为了将下载结果传回),您所拥有的将起作用。您正在使用尾随闭包调用getData
,但是getData
的定义不采用闭包参数(或调用它)。如果您更改方法以获取闭包并使用它(可能是为了将下载结果传回),您所拥有的将起作用。您正在使用尾随闭包调用getData
,但是getData
的定义不采用闭包参数(或调用它)。如果您更改方法以获取闭包并使用它(可能是为了将下载结果传回),您所拥有的将起作用。您正在使用尾随闭包调用getData
,但是getData
的定义不采用闭包参数(或调用它)。如果您更改方法以获取闭包并使用它(可能是为了将下载结果传回),那么您所拥有的将起作用。如果您要使用尾随闭包调用方法,则必须在方法中声明闭包参数:
func getData( completion:()->() ) {
if let CCClassURL = NSURL(string: "", relativeToURL: CCClassBaseURL ) {
let networkOperation = NetworkOperation(url: CCClassURL)
networkOperation.downloadJSONFromURL {
(let JSONDictionary) in
print(JSONDictionary?["seed"])
self.seed = JSONDictionary?["seed"] as? String
completion()
}
} else {
print("Cold not construct a valid URL")
completion()
}
}
一个好的经验法则是,任何采用某种“完成”闭包的方法都应该始终调用该闭包,即使操作失败。因此,确保在URL构造失败的
else
块中调用completion()
,或者发生网络错误,或者发生JSON解析错误。如果要使用尾部闭包调用方法,则必须在方法中声明闭包参数:
func getData( completion:()->() ) {
if let CCClassURL = NSURL(string: "", relativeToURL: CCClassBaseURL ) {
let networkOperation = NetworkOperation(url: CCClassURL)
networkOperation.downloadJSONFromURL {
(let JSONDictionary) in
print(JSONDictionary?["seed"])
self.seed = JSONDictionary?["seed"] as? String
completion()
}
} else {
print("Cold not construct a valid URL")
completion()
}
}
一个好的经验法则是,任何采用某种“完成”闭包的方法都应该始终调用该闭包,即使操作失败。因此,确保在URL构造失败的
else
块中调用completion()
,或者发生网络错误,或者发生JSON解析错误。如果要使用尾部闭包调用方法,则必须在方法中声明闭包参数:
func getData( completion:()->() ) {
if let CCClassURL = NSURL(string: "", relativeToURL: CCClassBaseURL ) {
let networkOperation = NetworkOperation(url: CCClassURL)
networkOperation.downloadJSONFromURL {
(let JSONDictionary) in
print(JSONDictionary?["seed"])
self.seed = JSONDictionary?["seed"] as? String
completion()
}
} else {
print("Cold not construct a valid URL")
completion()
}
}
一个好的经验法则是,任何采用某种“完成”闭包的方法都应该始终调用该闭包,即使操作失败。因此,确保在URL构造失败的
else
块中调用completion()
,或者发生网络错误,或者发生JSON解析错误。如果要使用尾部闭包调用方法,则必须在方法中声明闭包参数:
func getData( completion:()->() ) {
if let CCClassURL = NSURL(string: "", relativeToURL: CCClassBaseURL ) {
let networkOperation = NetworkOperation(url: CCClassURL)
networkOperation.downloadJSONFromURL {
(let JSONDictionary) in
print(JSONDictionary?["seed"])
self.seed = JSONDictionary?["seed"] as? String
completion()
}
} else {
print("Cold not construct a valid URL")
completion()
}
}
一个好的经验法则是,任何采用某种“完成”闭包的方法都应该始终调用该闭包,即使操作失败。因此,如果URL构造失败,或者发生网络错误,或者发生JSON解析错误,请确保在else
块中调用completion()