';发送一次';在Swift中不可用:请改用延迟初始化的全局变量
在迁移到Swift 3时,我在';发送一次';在Swift中不可用:请改用延迟初始化的全局变量,swift,swift3,Swift,Swift3,在迁移到Swift 3时,我在dispatch\u once\t方面遇到问题 根据: Swift中不再提供免费功能dispatch_once。在里面 Swift,您可以使用延迟初始化的全局或静态属性和 获得与dispatch_once相同的线程安全性和一次调用保证 假如例如: let myGlobal={…global在对闭包的调用中包含初始化…}() \=myGlobal//使用myGlobal将仅在第一次使用时调用初始化代码。 所以我想迁移这段代码。所以在移民之前: class var sh
dispatch\u once\t
方面遇到问题
根据:
Swift中不再提供免费功能dispatch_once。在里面
Swift,您可以使用延迟初始化的全局或静态属性和
获得与dispatch_once相同的线程安全性和一次调用保证
假如例如:
let myGlobal={…global在对闭包的调用中包含初始化…}()
\=myGlobal//使用myGlobal将仅在第一次使用时调用初始化代码。
所以我想迁移这段代码。所以在移民之前:
class var sharedInstance: CarsConfigurator
{
struct Static {
static var instance: CarsConfigurator?
static var token: dispatch_once_t = 0
}
dispatch_once(&Static.token) {
Static.instance = CarsConfigurator()
}
return Static.instance!
}
迁移之后,按照苹果的指导方针(手动迁移),代码如下所示:
class var sharedInstance: CarsConfigurator
{
struct Static {
static var instance: CarsConfigurator?
static var token = {0}()
}
_ = Static.token
return Static.instance!
}
但是当我运行这个程序时,当访问return Static.instance时,我会遇到以下错误代码>:
致命错误:在展开可选值时意外发现nil
我从这个错误中看到实例
成员是nil
,但为什么是这样?我的迁移有什么问题吗?尽管在Swift 2中是有效的,但代码过于冗长。在Swift 3中,Apple通过闭包强制您使用延迟初始化:
class CarsConfigurator {
static let sharedInstance: CarsConfigurator = { CarsConfigurator() }()
}
Swift 3
中删除一次dispatch\u
。检查一次关于如何做事情的答案,
。