我是swift的新手,我需要帮助才能阅读以下代码。
作为代码块第一行的(result,error)含义是什么:
self.table!.update(completedItem){ (结果,错误)in // ...来代码 }
完整代码:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
let record = self.records[indexPath.row]
let completedItem = record.mutableCopy() as NSMutableDictionary
completedItem["complete"] = true
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
self.table!.update(completedItem) {
(result, error) in
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
if error != nil {
println("Error: " + error.description)
return
}
self.records.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}
}
答案 0 :(得分:3)
例如,UIView
定义了具有此签名的类方法:
class func animateWithDuration(duration: NSTimeInterval, animations: () -> Void)
所以你可以这样称呼它:
UIView.animateWithDuration(0.2, animations: {
self.view.alpha = 0
})
或者您可以使用尾随闭包调用它,如下所示:
UIView.animateWithDuration(0.2) {
self.view.alpha = 0
}
请注意,使用尾随闭包,您完全省略了最后一个参数的关键字(animations:
)。
您只能对函数的最后一个参数使用尾随闭包。例如,如果使用UIView.animateWithDuration(animations:completion:)
,则必须将animations:
块放在括号内,但可以使用completion:
块的尾随闭包。
(result, error)
部分声明了块参数的名称。我推断update
方法的签名是这样的:
func update(completedItem: NSMutableDictionary,
completion: (NSData!, NSError!) -> Void)
所以它用两个参数调用完成块。要访问这些参数,该块会为其指定名称result
和error
。您不必指定参数类型,因为编译器可以根据update
的声明推断出类型。
请注意,您实际上可以省略参数名称并使用简写名称$0
和$1
:
self.table!.update(completedItem) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
if $1 != nil {
println("Error: " + $1.description)
return
}
self.records.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}
您可以阅读“Closures” in The Swift Programming Language了解有关闭包的更多信息。