【问题标题】:Using public enums to control TimeZone in Swift 3在 Swift 3 中使用公共枚举来控制 TimeZone
【发布时间】:2017-01-27 11:27:46
【问题描述】:

我一直在将一些代码更新到 Swift 3.0。我正在使用 Melvin Rivera 的精彩 date extension for Swift 3.0。现在 Melvin 将 TimeZone 声明为公共枚举,如下所示:

public enum TimeZone {
case local, utc
}

现在我的 Swift 3.0 之前的代码使用了一些常见的 TimeZone 代码时遇到了问题。例如:

let df = DateFormatter()
    df.dateFormat = "MMM d, yyyy, hh:mm a"
    df.timeZone = TimeZone(abbreviation: usersTimeZone)

每当我使用这样的代码时,我都会收到一个编译器错误,指出“'TimeZone' 无法构造,因为它没有可访问的初始化程序”。如果 TimeZone 已被构造为公共枚举,那么使用各种 TimeZone 函数的正确方法是什么?

【问题讨论】:

    标签: ios swift enums timezone


    【解决方案1】:

    错误消息说TimeZone 没有任何可访问的初始化程序,这是因为它没有任何初始化程序。 TimeZone 是一个枚举,您可以键入 TimeZone.localTimeZone.utc,因为它现在可以工作。

    对于初始化程序部分,您可以在 Apple 文档网站上阅读有关 init here 的更多信息。

    您可以在 Apples documentation site 上阅读有关枚举的更多信息。

    编辑:
    将您的代码更新为以下内容:

    let df = DateFormatter()
    df.dateFormat = "MMM d, yyyy, hh:mm a"
    df.timeZone = TimeZone(abbreviation: String(describing: Zone.local))
    
    public enum Zone: String {
        case local
        case utc
    }
    
    1. 我将 TimeZone 枚举重命名为 Zone 因为 TimeZone 是 为 DateFormatter 保留工作
    2. 您需要为 TimeZone 传递一个字符串值,这就是
    3. 我已将代码更新为 Swift 3.0 语法

    .

    【讨论】:

    • 感谢 Rashwan,我尝试将代码更改为 df.timeZone = TimeZone.local 但我收到编译器错误,指出“无法将 'TimeZone' 类型的值分配给 'TimeZone!'”。对于应该使用什么代码来替换我的 swift 3.0 之前的代码,我仍然有点困惑。
    • @Tom,我修正了你的错误。使用我的代码,它将适用于 Swift 3.0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多