Swift: var a: Int { calculateValue() } 和 var b = { calculateValue() }() 之间的区别

Swift: Difference between var a: Int { calculateValue() } and var b = { calculateValue() }()

我正在尝试了解

之间的区别
var a: Int { calculateValue() }

var b = { calculateValue() }()

我有点困惑,但我想我已经掌握了基础知识,所以我只是想确保我做对了:第一个是计算出来的 属性 会 运行 calculateValue() 每次我在某处使用 a 并使用该值,而第二个只是在初始化时将闭包的值分配给 b?

谢谢

一个

var a: Int { calculateValue() } 是一个计算出来的 属性,相当于:

var a: Int {
   get { calculateValue() }
}

每次访问 a 时都会调用计算体,这意味着每次访问都会调用 calculateValue )

B

{ calculateValue() } 是类型 () -> Int 的闭包,其主体调用 calculateValue。尾随的 () 调用该闭包,这使其成为立即计算的闭包。

结果(分配给存储的 属性 var b)只是一个 Int(不在 () -> Int,因为已经调用了闭包)