我的问题是,无论如何我都需要初始化该特定变量,因为还有另一个对象依赖于此变量的值
这是代码(我将变量设置为global)
lazy var getToken = {
if let token = keychain["token"].string {
return token
}
}()
Run Code Online (Sandbox Code Playgroud)
我正在使用惰性,因为无论如何我都需要使用它来进行初始化。
当我尝试将其放在全局文件中时出现此错误错误
'lazy'可能不会在已经很懒惰的global上使用
这是取决于此令牌的对象
单例设计
class SocketIOManager: NSObject {
static let sharedInstance = SocketIOManager()
let socket: SocketIOClient!
private override init() {
super.init()
socket = SocketIOClient(socketURL: URL(string: mainURL)!, .connectParams(["token": getToken])])
}
}
Run Code Online (Sandbox Code Playgroud)
如果你看看socket =在"token",这就是我需要的令牌
重要的
user2908517的回答是完全错误的。所以请求阅读一次。
根据文档 https://docs.swift.org/swift-book/LanguageGuide/Properties.html
全局常量和变量总是以类似于延迟存储属性的方式延迟计算。与惰性存储属性不同,全局常量和变量不需要用惰性修饰符标记。
局部常量和变量永远不会被延迟计算。
这意味着 全局常量和变量不是类属性,它们就像海洋和河流一样不同。请求阅读/sf/answers/2368613691/
默认情况下,类属性不是惰性的,当它的 init 方法被称为设计或说服时,类属性会自动初始化。
我不明白你为什么把懒惰放在那里?
当您想在编译器实际需要时初始化变量时,可以使用 Lazy。
其他惰性类型(普通变量)将在指定初始化程序调用后立即初始化
您可以使用
var getToken : String? = { if let token = keychain["token"].string { return token } }
Run Code Online (Sandbox Code Playgroud)
我不确定“我正在使用惰性,因为无论如何我都需要初始化它”,这是什么意思,但是默认情况下所有全局变量都是惰性的,这就是为什么不需要(也不允许)放置关键字”全局变量声明之前的“懒惰”:根据其性质,它们已经是懒惰的。
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |