Swift避免在初始化程序中重复代码

5 initialization ios swift

如何避免在初始化程序之间重复代码?我希望dateFormatter保持let常量.

let dateFormatter: NSDateFormatter

init() {
    dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = .MediumStyle
    dateFormatter.timeStyle = .MediumStyle
    super.init(nibName: nil, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
    dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = .MediumStyle
    dateFormatter.timeStyle = .MediumStyle
    super.init(coder: aDecoder)
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = .MediumStyle
    dateFormatter.timeStyle = .MediumStyle
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
Run Code Online (Sandbox Code Playgroud)

vad*_*ian 9

如果这确实是实际的代码替换整个代码

lazy var dateFormatter : NSDateFormatter = {
   let formatter = NSDateFormatter()
   formatter.dateStyle = .MediumStyle
   formatter.timeStyle = .MediumStyle
   return formatter
}()
Run Code Online (Sandbox Code Playgroud)

该变量在第一次访问时会被懒惰地初始化一次

编辑:也可以在没有惰性属性的情况下将变量声明为常量.

let dateFormatter : NSDateFormatter = { ...
Run Code Online (Sandbox Code Playgroud)

不同之处在于格式化程序是在实例初始化期间立即(不是懒惰地)创建的.

编辑:

在斯威夫特3 NSDateFormatter已更名为DateFormatter
.MediumStyle.mediumStyle