当我调用以下内容时,编译器会抱怨我在调用中缺少参数#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()