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 静态实例,迁移工具的语法更改 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
升级到 Xcode 8 并将语法从 swift 2.3 转换为 swift 3.0 后文件丢失警告
将使用 Cocoapods 1.0.1 的 iOS 应用程序从 Swift 2.2 迁移到 3.0