使用具有lazy属性的函数调用会导致编译错误



当我调用以下内容时,编译器会抱怨我在调用中缺少参数#1的参数:

import Foundation
class Person {
    func uniqueID() -> String {
        return NSUUID().UUIDString
    }
    lazy var sessionID: String = uniqueID()
}

let p = Person()
p.sessionID
p.sessionID
p.sessionID

当我用替换线路时

lazy var sessionID: String = NSUUID().UUIDString

它有效。

在延迟初始化中调用函数时出现问题的原因是什么?

有趣的是,调用闭包是有效的,即使语法看起来笨重,因为如果self是一个弱引用,我必须保护它:

lazy var sessionID: String = {
    return self.uniqueID()
}()

问题是您缺少对self的引用。它在闭包中,但不在直接方法调用中。

lazy var sessionID = self.uniqueID()

最新更新