我的想法很简单: 1.我有一个带按钮的ViewController 2.点击按钮后,我想从我的网站获取数据 我想把关于数据的指示信息下载 4.完成显示消息后OK或NOT OK
我有一堂课CCCLass
class CCClass {
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中创建Array并返回主线程吗?在下载数据之后,我想将此用于下一个http查询。
答案 0 :(得分:2)
您正在使用尾随闭包调用getData
,但.fade_background
{
background-color: black;
opacity: 0.65;
}
的定义并未采用闭包参数(或调用它)。如果您更改方法以获取闭包并使用它(可能会将下载结果传回),您所拥有的将会起作用。
答案 1 :(得分:1)
如果要使用尾随闭包调用它,则必须在方法中声明一个闭包参数:
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()
}
}
遵循的一个好的经验法则是,任何采用某种“完成”闭包的方法都应该始终调用该闭包,即使操作失败也是如此。因此,请确保在completion()
块中调用else
,其中URL构造失败,或者发生网络错误,或者发生了JSON解析错误。