首页 > 解决方案 > swift - 初始化 UIContextualAction 类

问题描述

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

我不明白的是第三个参数(即handler)传递给类初始化程序的方式。

为什么在传递delete参数的值后,处理函数在单独的大括号内传递而不传递它?

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

标签: swiftinitializer

解决方案


这两种写法是一样的:

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的文档:

如果您需要将闭包表达式作为函数的最终参数传递给函数并且闭包表达式很长,则将其编写为尾随闭包会很有用。尾随闭包写在函数调用的括号之后,即使它仍然是函数的参数。当您使用尾随闭包语法时,您不会将闭包的参数标签作为函数调用的一部分编写。


推荐阅读