Как я могу избежать повторения кода между моими инициализаторами? Я хочу, чтобы dateFormatter оставался константой let.Swift избежать повторения кода в инициализаторе
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)
}
, поскольку это будет ленивый, вам необходимо добавить здесь ленивый префикс? и изменить let to var. в противном случае логика форматирования даты не будет генерироваться мгновенно, а вместо этого будет вызвана каждый раз, когда к ней обращаются. –
Нет, вы можете использовать обе формы, я просто тестировал ее на игровой площадке. – vadian
'ПРИМЕЧАНИЕ Вы всегда должны объявлять ленивое свойство как переменную (с ключевым словом var), поскольку ее начальное значение не может быть получено до завершения инициализации экземпляра. Константные свойства всегда должны иметь значение до завершения инициализации и поэтому не могут быть объявлены как ленивые. ' [Источник] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html) – Laffen