gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 06:46:38 25 4
gpt4 key购买 nike

我正在尝试将一个实用程序类放在一起,该类可与 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 没有允许我在创建时设置它们的 in init()。但我只需要将它们创建一次,然后就可以重复使用了。执行此操作的正确模式/方法是什么。

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

最佳答案

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

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

关于具有复杂初始化的 Swift 静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com