为什么有时我们使用->;swift中的完成处理程序无效,但有时无效?

为什么有时我们使用->;swift中的完成处理程序无效,但有时无效?,swift,Swift,我看了两个教程。第一个是关于swift中的基本完成处理程序。导师展示了此代码的示例: func isTextValid(input: String, completion: (result: Bool) -> Void) { if (input == "Hello") { completion(result: true) }else{ completion(result:false) } } isTextValid("Hello

我看了两个教程。第一个是关于swift中的基本完成处理程序。导师展示了此代码的示例:

func isTextValid(input: String, completion: (result: Bool) -> Void) {

    if (input == "Hello") {
        completion(result: true)
    }else{
        completion(result:false)
    }
}


isTextValid("Hello", { (result) -> Void in
    if (result == true) {
        println("People say Hello")
    }else{
        println("People do not say hello")
    }
})
第二个教程是关于HTTP请求的,代码如下所示:

        /* 4. Make the request */
    let task = session.dataTaskWithRequest(request) {data, response, downloadError in

        if let error = downloadError {
            println("Could not complete the request \(error)")
        } else {

            /* 5. Parse the data */                
            var parsingError: NSError? = nil
            let parsedResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &parsingError) as! NSDictionary

            /* 6. Use the data! */                
            if let error = parsingError {
                println(error)
            } else {
                if let results = parsedResult["results"] as? [[String : AnyObject]] {
                    self.movies = Movie.moviesFromResults(results)
                    dispatch_async(dispatch_get_main_queue()) {
                        self.tableView.reloadData()
                    }
                } else {
                    println("Could not find results in \(parsedResult)")
                }
            }
        }
    }

    /* 7. Start the request */
    task.resume()
您可以看到,第一行代码没有像第一个教程中那样返回void,为什么


什么是退货无效?为什么我们必须键入return void?

void的使用是可选的,正如您可以使用或不使用void声明函数一样,您可以使用或不使用void声明完成处理程序

func noReturn() -> Void
与相同

func noReturn()
对于声明时的完成句柄:

func isTextValid(input: String, completion: (result: Bool) -> Void) 
等于

func isTextValid(input: String, completion: (result: Bool) -> ()) 
(result) in
对于调用时的完成句柄:

(result) -> Void in
等于

func isTextValid(input: String, completion: (result: Bool) -> ()) 
(result) in

void的使用是可选的,正如您可以使用或不使用void声明函数一样,您可以使用或wihtout声明完成处理程序

func noReturn() -> Void
与相同

func noReturn()
对于声明时的完成句柄:

func isTextValid(input: String, completion: (result: Bool) -> Void) 
等于

func isTextValid(input: String, completion: (result: Bool) -> ()) 
(result) in
对于调用时的完成句柄:

(result) -> Void in
等于

func isTextValid(input: String, completion: (result: Bool) -> ()) 
(result) in

当我使用它时,我可以只键入:let task=session.dataTaskWithRequest(request){data,response,downloadError in………对吗?我也可以这样声明它吗?:func isTextValid(输入:String,完成:(result:Bool)),因为从您的示例中,我可以在普通函数中执行此操作:func noReturn()不,当您声明时可以省略void这个词,但您仍然需要括号(结果:Bool)->())当我使用它时,我可以只键入:let task=session.dataTaskWithRequest(request){data,response,downloadError in………对吗?我也可以这样声明它吗?:func isTextValid(输入:String,完成:(result:Bool))因为从您的示例中,我可以在普通函数中执行此操作:func noReturn()否当您声明时,可以省略单词void,但仍然需要括号(结果:Bool)->())