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)
  • 这里有 3 个代码片段,我的疑问是:
  • 代码片段 1 和代码片段 2 有什么区别?
  • Snippet 1 或 Snippet 2 中的哪一个是更好的表示,应该使用?
  • 代码片段 1 到底是什么意思?它是某种属性(完成)在 swift 中观察到的吗?
  • iOS8 希望我们编写的方式如 Snippet 1 所示,即当我在 Xcode 自动完成时按 Enter 键时,它会转换为 Snippet 1。我们应该使用 Code Snippet 1 还是更喜欢使用 Snippet 2/3,因为它们很容易理解?

  • 谢谢

    最佳答案

    您询问:



    代码片段 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/

    10-12 14:46