Swift 3.0 静态实例,迁移工具的语法更改 [重复]

Posted

技术标签:

【中文标题】Swift 3.0 静态实例,迁移工具的语法更改 [重复]【英文标题】:Swift 3.0 Static instances, change in syntax from migration tool [duplicate] 【发布时间】: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 【参考方案1】:

dispatch_once_t 已在 Swift 3 中删除。

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

class MenuConfigurator

  static let sharedInstance = MenuConfigurator()


let configurator = MenuConfigurator.sharedInstance

忘记迁移者的建议。

【讨论】:

以上是关于Swift 3.0 静态实例,迁移工具的语法更改 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

迁移到 Swift 3.0,构建问题

升级到 Xcode 8 并将语法从 swift 2.3 转换为 swift 3.0 后文件丢失警告

Swift 3.0 xCode 8 迁移吊舱

将使用 Cocoapods 1.0.1 的 iOS 应用程序从 Swift 2.2 迁移到 3.0

Swift 3.0 和 Xcode 8 迁移后未调用 UITableViewDelegate 方法

Swift 3.0 迁移后的 Project-Swift.h 文件编译相同函数数百次,编译耗时 7 分钟