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

Right way to make a UIAlertAction's handler

似乎有 3 种不同的方法来编写 UIAlertAction 的处理程序。以下每个人似乎都在做我希望他们做的 same/expected 事情

// 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

这些都是制作handler吗?有什么区别,哪一种最好用?

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

Swift Programming Language 书中对此有更多解释,请参阅闭包部分。

都一样。由于 swift 是一种强类型语言,因此无需将操作定义为 UIAlertAction,因为 UIAlertAction 的 init 方法将其定义为 UIAlertAction。 就像当您从该数组中检索值时使用某些自定义 class 定义数组时,您不需要像 Objective C.

中那样对其进行转换

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

此外,由于它没有 return 类型,因此也无需提及 Void(return 类型)。如果它有 return 类型,你需要提到它,比如 param -> RetType in

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