为什么有时我们使用->;swift中的完成处理程序无效,但有时无效?
我看了两个教程。第一个是关于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
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)->())