Swift 3中的延迟属性与函数

Piy*_*ish 1 function lazy-evaluation swift

    struct Person
    {
        var personName:String?
        init(name:String) {
              personName=name
        }

    lazy var greetLazy:String =
    {
            return "Hello \(self.personName!)"
    }()

    func greetFunc()->String
    {
        return "Hello \(self.personName!)"
    }
}

var person:Person=Person(name:"")
print(person.greetLazy)
print(person.greetFunc())
Run Code Online (Sandbox Code Playgroud)

我创造了两件事,即一个懒惰的属性和一个做同样事情的功能.现在它说greetLazy的值只会在第一次访问时计算出来,所以当我使用person.greetLazy访问它时,它会打印到控制台,这就是懒惰应该是什么意思.

我的问题是在函数的情况下,只有在我访问函数时才会返回值.它不会预先计算它.那么在这种情况下两者之间会有什么区别呢?

das*_*ght 6

Swift中延迟属性的全名是延迟存储属性,这意味着属性的值在第一次需要时立即存储.再次引用同一属性时,不会执行其他计算.

另一方面,每次调用函数时,都会计算函数的结果.

以下是您修改过的代码,用于说明这一点:

struct Person {
    var personName:String?
    init(name:String) {
        personName=name
    }

    lazy var greetLazy:String = {
        print("Computing property...")
        return "Hello \(self.personName!)"
    }()

    func greetFunc()->String
    {
        print("Computing function...")
        return "Hello \(self.personName!)"
    }
}

var person:Person=Person(name:"")
print(person.greetLazy)
print(person.greetFunc())
print(person.greetLazy)
print(person.greetFunc())
Run Code Online (Sandbox Code Playgroud)

上面"Computing property..."只打印一次,而"Computing func..."打印两次.