计算出的“var”和一个nullary函数有什么区别,什么时候应该使用它们?

时间:2016-04-11 17:36:36

标签: swift

Swift允许两者:

var foo: Int { return 1 }
func foo() -> Int { return 1 }

在呼叫站点,这些用作:

bar.foo
bar.foo()

我看到func

的优点
  • 它可以被称为捕获接收器的闭包(bar.foo参数允许() -> Int
  • 可以将其称为静态成员(Bar.fooBar -> (() -> Int))。

我看到var

的优点
  • 更短,更清晰的代码(不是技术差异)。
  • let兼容以获得协议一致性 - 如果协议FooTypeBar可能符合计算var,但Baz可能会获得仅使用常量let声明。这也可能导致代码更短。

两种声明的所有差异和相似之处是什么?

1 个答案:

答案 0 :(得分:0)

使用var,您可以添加其他观察者(默认为get观察者)

var foo: Int {
   get{
    return 1
   }
   set(v){
     self.something = v
     self.moreStuff()
   }
 }

允许设置bar.foo = 5

func只是一种方法,当void具有类型

时,它也可以返回var(无)