gpt4 book ai didi

swift - 如何在函数调用后读取代码块?

转载 作者:可可西里 更新时间:2023-11-01 01:06:44 27 4
gpt4 key购买 nike

我是 swift 的新手,我需要阅读以下代码的帮助。

  1. 函数调用“self.table.update(completedItem)”之后的代码块的含义是什么{...}
  2. 代码块第一行的(result,error)是什么意思:

    self.table!.update(completedItem) { (结果,错误)在//...来代码

完整代码:

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)
}
}

最佳答案

  1. 代码块称为“尾随闭包”。当函数或方法将闭包作为最后一个参数时,您可以将闭包放在函数/方法调用的右括号之后。尾随闭包让您编写的函数看起来更像内置控制结构,并让您避免在圆括号内嵌套大括号。

例如,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: block 放在括号内,但您可以为完成: block 。

  1. (result, error) 部分声明 block 参数的名称。我推断 update 方法有一个像这样的签名:

    func update(completedItem: NSMutableDictionary,
    completion: (NSData!, NSError!) -> Void)

所以它用两个参数调用完成 block 。为了访问这些参数,该 block 为它们指定了名称 resulterror。您不必指定参数类型,因为编译器可以根据 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 了解有关闭包的更多信息.

关于swift - 如何在函数调用后读取代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com