let callActionHandler = { (action:UIAlertAction!) -> Void) in
let alertMessage = UIAlertController(title: "Service Unavailable", message: "Sorry, the call feature is not available yet. Please retry later", preferredStyle: UIAlertControllerStyle.Alert)
alertMessage.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alertMessage, animated: true, completion: nil)
};
// Code Snippet 1
let callAction = UIAlertAction(title: "Call" + "123-000-\(indexPath.row)", style: UIAlertActionStyle.Default ) { (action:UIAlertAction!) -> Void in
println("check this out")
}
// Code Snippet 2
let callAction = UIAlertAction(title: "Call" + "123-000-\(indexPath.row)", style: UIAlertActionStyle.Default, handler: { (action:UIAlertAction!) -> Void in
println("Lets check this out")
})
// Code Snippet 3
let callAction = UIAlertAction(title: "Call" + "123-000-\(indexPath.row)", style: UIAlertActionStyle.Default , handler: callActionHandler)
谢谢
最佳答案
您询问:
代码片段 1 正在使用片段 2 的“尾随闭包”再现。请参阅 The Swift Programming Language: Closures 中的尾随闭包讨论,其中说:
所以代码段 1 和代码段 2 正在做完全相同的事情。
通常人们会更喜欢片段 1 的尾随闭包语法,因为它更简洁。但是使用任何使您的代码意图既清晰又简洁的方法。
不,它与片段 2 完全相同。
同样,使用您喜欢的任何东西,并且是最清晰和简洁的。通常人们会在可能的情况下利用尾随闭包语法。
就个人而言,除了尾随闭包语法之外,我可能会利用枚举的参数和点语法的推断类型来进一步简化:
let callAction = UIAlertAction(title: "Call 123-000-\(indexPath.row)", style: .default) { action in
print("check this out")
}
关于Swift 中的 iOS8 尾随闭包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26832219/