【问题标题】:Swift 3.0 Static instances, change in syntax from migration tool [duplicate]Swift 3.0 静态实例,迁移工具的语法更改 [重复]
【发布时间】:2017-02-04 22:34:18
【问题描述】:

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

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!
  }

}

我收到错误 Use of unresolved identifier Static。这里发生了什么?为什么要创建新的 var private static var __once

【问题讨论】:

  • 您好,将项目转换为 swift 3 真是一场噩梦。您是否尝试过放置您之前的代码并查看它给出的错误。从中您可能会知道为什么转换工具会以这种方式改变它。 static 你也可以在 swift 3 中使用。我正在使用它。但仅限于小s

标签: ios swift swift3


【解决方案1】:

dispatch_once_t 已在 Swift 3 中删除。

创建单例的推荐方法(至少从 Swift 2 开始)很简单

class MenuConfigurator
{
  static let sharedInstance = MenuConfigurator()
}

let configurator = MenuConfigurator.sharedInstance

忘记迁移者的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多