迅速-初始化UIContextualAction类

时间:2019-05-16 18:52:40

标签: swift initializer

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 参数的值之后,不将处理程序函数传递到单独的花括号内?

还有其他方法可以获取相同的输出吗?

2 个答案:

答案 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

What is trailing closure syntax in Swift?