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)
}
我不明白的是如何将第三个参数(即处理程序)传递给类初始化器。
为什么在传递delete参数的值之后,处理程序函数在单独的大括号中传递而不传递它呢?
还有其他方法可以得到相同的输出吗?
发布于 2019-05-16 10:58:39
这两种写作方式是相同的:
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)
})
您可以查看尾随关闭的文档。
如果您需要将闭包表达式作为函数的最后参数传递给函数,并且闭包表达式是长的,那么将其写成尾随闭包是很有用的。后面的闭包是在函数调用的括号之后写的,尽管它仍然是函数的一个参数。当您使用尾随闭包语法时,您不会将闭包的参数标签作为函数调用的一部分。
发布于 2019-05-16 10:55:26
因为第三个参数
let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
completion(true)
}
是一个尾随闭包,当用户单击delete操作时,它将被触发以运行一些相关代码,而不是插入警报操作的参数。
如果你不需要做任何事情,你也可以选择零路径。
let action2 = UIContextualAction(style: .normal, title: "Delete", handler:nil)
https://www.hackingwithswift.com/example-code/language/what-is-trailing-closure-syntax
https://stackoverflow.com/questions/56174917
复制相似问题