Swift 中闭包方法的返回值

Vie*_*ens 6 cocoa-touch ios swift

有没有一种方法可以shouldPerformSegueWithIdentifier从我的闭包中返回方法的值?或者我应该采取不同的做法?

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {

    getDataFromSomewhere() { succeeded, data in
        if succeeded {
            // Should return true here            
        } else {
            self.errorAlert("Error", message: "Can't get data...")
            // Should return false here
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

rob*_*off 5

您无法shouldPerformSegueWithIdentifier:sender:从放置的位置返回// Should return true here。你需要做这样的事情:

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
    var returnValue: Bool = false

    getDataFromSomewhere() { succeeded, data in
        if succeeded {
            returnValue = true
        } else {
            self.errorAlert("Error", message: "Can't get data...")
            returnValue = false
        }
    }

    return returnValue
}
Run Code Online (Sandbox Code Playgroud)

getDataFromSomewhere请注意,只有在返回之前执行闭包时,这才有效getDataFromSomewhere。如果getDataFromSomewhere存储闭包,并安排稍后调用它(例如,在异步网络请求之后),那么这将不起作用。它只会shouldPerformSegueWithIdentifier:sender:返回您用于初始化的值returnValue