【问题标题】:swift - Initializing the UIContextualAction classswift - 初始化 UIContextualAction 类
【发布时间】:2019-10-04 02:34:45
【问题描述】:

UIContextualAction 类有一个带有以下签名的初始化器。

public convenience init(style: UIContextualAction.Style, title: String?, handler: @escaping UIContextualAction.Handler)

UIContextualAction 类的实例可以使用以下代码 sn-p 创建。

let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
     completion(true)
}

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

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

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

【问题讨论】:

标签: swift initializer


【解决方案1】:

这两种写法是一样的:

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

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

【讨论】:

    【解决方案2】:

    因为第三个参数

    let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
     completion(true)
    }
    

    是一个尾随闭包,当用户点击删除操作时,您希望它被触发以运行一些相关代码,它不是初始化警报操作的参数

    如果你不需要做任何事情,你也可以 path 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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2016-04-11
      • 2015-03-04
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多