Swift 我怎样才能等到下载完成?

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

我的想法很简单: 1.我有一个带按钮的ViewController 2.点击按钮后,我想从我的网站获取数据 3.我想输入有关正在下载的数据的指示信息 4.完成后显示消息“OK”或“NOT OK”

我有一节课

类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中创建数组并返回到主线程?数据下载后,我想用这个来下一个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()