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

时间:2015-01-15 21:52:19

标签: swift methods closures difference

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()

其实我用哪个?有什么更好的?财产关闭或方法?什么时候使用它们?

2 个答案:

答案 0 :(得分:0)

  1. 属性关闭可以是可选的并且可分配。示例:var description: (() -> String)?
  2. 属性关闭可以捕获变量(例如示例中的self)。你在那里创造了一个内存泄漏。
  3. 如果实现定义方法的协议,则必须符合方法,而不是属性闭包。
  4. 对策略模式使用属性闭包,对象的用户可以更改行为。几乎在任何其他情况下使用方法。

答案 1 :(得分:0)

如果属性是某些(或多或少)静态信息,请使用该属性。使用函数指示计算某些内容。