使用闭包时,Swift延迟存储属性与常规存储属性

Boo*_*oon 2 closures lazy-evaluation swift

在Swift中,我们可以设置一个存储属性来使用闭包:

class Test {
  var prop: String = {
    return "test"
  }()
}
Run Code Online (Sandbox Code Playgroud)

VS

或者使懒惰的存储属性使用闭包:

class Test {
  lazy var prop: String = {
    return "test"
  }()
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,用于获取属性值的代码仅运行一次.看起来它们是等价的.

在使用闭包时,我应该何时使用延迟存储属性与计算属性?

use*_*734 18

import Foundation
struct S {
    var date1: NSDate = {
        return NSDate()
    }()
    lazy var date2: NSDate = {
        return NSDate()
    }()
}

var s = S()
sleep(5)
print( s.date2, s.date1)
/* prints

2015-11-24 19:14:27 +0000 2015-11-24 19:14:22 +0000

*/
Run Code Online (Sandbox Code Playgroud)

两者都是存储属性,检查它们的实际评估时间.当第一次需要值时,"按需"评估惰性属性