UIContextualAction 类具有带有以下签名的初始化程序。
public convenience init(style: UIContextualAction.Style, title: String?, handler: @escaping UIContextualAction.Handler)
可以使用以下代码段创建 UIContextualAction 类的实例。
let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
completion(true)
}
我不明白第3个参数(即 handler )传递给类初始化程序的方式。
为什么在传递 delete 参数的值之后,不将处理程序函数传递到单独的花括号内?
还有其他方法可以获取相同的输出吗?
答案 0 :(得分:2)
这两种书写方式都相同:
let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
completion(true)
}
let action2 = UIContextualAction(style: .normal, title: "Delete", handler: { (action, view, completion) in
completion(true)
})
您可以查看Trailing Closures的文档:
如果您需要将闭包表达式作为函数传递给函数 函数的最后一个参数,并且闭包表达式很长,它可以 将其写为尾随闭包很有用。尾随 闭包是在函数调用的括号后写的,即使 它仍然是该函数的参数。使用尾随时 闭包语法,您无需将闭包的参数标签写为 函数调用的一部分。
答案 1 :(得分:1)
因为第三个参数
let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
completion(true)
}
是结尾的闭包,您希望当用户单击delete动作并且它不是初始化警报动作的参数时,触发它来运行一些相关代码
如果您不需要执行任何操作,也可以设置nil
let action2 = UIContextualAction(style: .normal, title: "Delete", handler:nil)
https://www.hackingwithswift.com/example-code/language/what-is-trailing-closure-syntax