制作 UIAlertAction 处理程序的正确方法

Posted

技术标签:

【中文标题】制作 UIAlertAction 处理程序的正确方法【英文标题】:Right way to make a UIAlertAction's handler 【发布时间】:2016-08-05 03:29:34 【问题描述】:

似乎有 3 种不同的方式来编写 UIAlertAction 的处理程序。以下每一项似乎都在做我希望他们做的相同/预期的事情

// 1.
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: (action: UIAlertAction!) -> Void in
   print("a")
)

// 2.
let okAction = UIAlertAction(title: "OK", style: .Default, handler:  (action: UIAlertAction!) in
   print("b")
)

// 3.
let okAction = UIAlertAction(title: "OK", style: .Default)  (action) in
   print("c")


// OUTPUT:
// a
// b
// c

这些都是处理程序吗?有什么区别,哪一种最好用?

【问题讨论】:

这个链接应该对***.com/questions/24190277/…有帮助 @gurmandeep 谢谢。我仍然想了解为什么 3. 是最好的以及它们之间的区别是什么 我同意@Joey。更多详情developer.apple.com/library/ios/documentation/UIKit/Reference/… 【参考方案1】:

它们都是一样的,主要是你喜欢的句法风格问题。选项 3 使用类型推断和尾随闭包语法,这通常是首选,因为它简洁并且在将最后一个参数闭包移到函数调用之外时去掉了额外的括号集。您可以通过删除 action 周围的括号来统一选项 3,这些也不需要。

Swift Programming Language 书中对此进行了详细说明,请参阅闭包部分。

【讨论】:

【参考方案2】:

都是一样的。由于 swift 是一种强类型语言,因此无需将操作定义为 UIAlertAction,因为 UIAlertAction 的 init 方法将其定义为 UIAlertAction。 就像在从该数组中检索值时定义一个带有某个自定义类的数组时,您不需要像在 Objective C 中那样强制转换它。

所以以上 3 种方法中的任何一种都可以,第 3 种方法看起来很清晰,适合我的口味:)

另外,由于它没有返回类型,因此也无需提及 Void(返回类型)。如果它有返回类型,则需要提及 param -> RetType in

method  param -> String in
        return "" // should return a String value

【讨论】:

以上是关于制作 UIAlertAction 处理程序的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertAction 处理程序延迟后运行

在 UIAlertAction 处理程序中更新 UI

未调用 UIAlertAction 处理程序

UIAlertAction 的处理程序有点太晚了——我怎样才能让它立即生效?

有没有办法在 UIAlertAction 中获取文本字段值?

UIAlertAction - 处理动作