属性 闭包和 Swift 中的方法有什么区别?

What is the difference between property closure and a method in Swift?

class Bartek {
    var name: String = "Bartek"
    var description: () -> String = {
         return "Person name is" + self.name
    }

    func description() -> String {
        return "Person name is" + name
    }
}

现在我可以像那样使用它了:

var bartek = Bartek()
bartek.description()

实际上我用哪个?什么更好? 属性 闭包或方法?什么时候使用它们?

  1. 属性 闭包可以是可选的和可赋值的。示例:var description: (() -> String)?
  2. 属性 闭包可以捕获变量(如示例中的 self )。你在那里造成了内存泄漏。
  3. 如果您实现定义方法的协议,则必须符合方法,而不是 属性 闭包。

对策略模式使用属性闭包,您的对象的用户可以在其中更改行为。在几乎任何其他情况下都使用方法。

如果是一些(或多或少)静态信息,请使用 属性。使用一个函数来指示某些东西是计算出来的。