【问题标题】:Swift static vars with complicated initialization具有复杂初始化的 Swift 静态变量
【发布时间】:2015-04-28 17:29:50
【问题描述】:

我正在尝试组合一个实用程序类来转换为/从 ISO8601 表示。到目前为止,我有以下内容:

import Foundation

class ISODateConversion {
    static let WithMilliseconds = NSDateFormatter()
    static let SansMilliseconds = NSDateFormatter()

    class func dateFromString(input:String) -> NSDate  {
        return WithMilliseconds.dateFromString(input) ?? SansMilliseconds.dateFromString(input)
    }

    class func stringFromDate(date:NSDate) ->String {
        return SansMilliseconds.stringFromDate(date)
    }
}

但我需要的不仅仅是实例化这两个格式化程序。我希望它们使用以下表达式进行初始化:

WithMilliseconds.timeZone = NSTimeZone(abbreviation: "GMT")
WithMilliseconds.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.S"

SansMilliseconds.timeZone = NSTimeZone(abbreviation: "GMT")
SansMilliseconds.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"

NSDateFormatter 没有 init() 允许我在创建时设置它们。但我只需要创建一次然后重复使用它们。这样做的正确模式/方式是什么。

(我也认为我应该将其更改为对 String 和 NSDate 的扩展,但我仍然存在如何让我的模块一次性设置这些可重用格式化程序的问题)。

【问题讨论】:

    标签: swift


    【解决方案1】:

    使用定义并调用匿名函数作为初始化器:

    static let WithMilliseconds : NSDateFormatter = {
        let d = NSDateFormatter()
        d.timeZone = NSTimeZone(abbreviation: "GMT")
        d.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.S"
        return d
    }()
    

    【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2010-09-26
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多