具有复杂初始化的Swift静态变量

时间:2015-04-28 17:29:50

标签: swift

我正在尝试将一个实用程序类放在一起,转换为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的扩展,但我仍然遇到如何让我的模块一次性设置这些可重用格式化程序的问题。)

1 个答案:

答案 0 :(得分:3)

使用define-and-call匿名函数作为初始化程序:

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