Swift 3.0 静态实例,迁移工具中语法的更改

20 浏览
0 Comments

Swift 3.0 静态实例,迁移工具中语法的更改

这个问题已经有了答案:

在Swift中使用dispatch_once单例模型

之前我会在类中创建一个共享的实例,像这样:

class MenuConfigurator
{
  // MARK: Object lifecycle
  class var sharedInstance: MenuConfigurator
  {
    struct Static {
      static var instance: MenuConfigurator?
      static var token: dispatch_once_t = 0
    }
    dispatch_once(&Static.token) {
      Static.instance = MenuConfigurator()
    }
    return Static.instance!
  }
}

看来Swift 3.0迁移工具已经将代码块更改为:

class MenuConfigurator
{
  private static var __once: () = {
      Static.instance = MenuConfigurator()
    }()
  // MARK: Object lifecycle
  class var sharedInstance: MenuConfigurator
  {
    struct Static {
      static var instance: MenuConfigurator?
      static var token: Int = 0
    }
    _ = MenuConfigurator.__once
    return Static.instance!
  }
}

我得到了错误使用未解决的标识符Static。这里发生了什么?为什么创建了新的变量private static var __once

admin 更改状态以发布 2023年5月24日
0
0 Comments

dispatch_once_t在Swift 3中已经被删除。

创建单例的推荐方式(至少从Swift 2开始)是

class MenuConfigurator
{
  static let sharedInstance = MenuConfigurator()
}
let configurator = MenuConfigurator.sharedInstance

忘记迁移器的建议。

0