In swift3 document. It is recommended to use lazy
by the two following ways:
1. directly init
`lazy var someViews: UILabel = UILabel()`
2. init with block
lazy var overlayView: UILabel = { [unowned self] in
let overlayView = UILabel()
overlayView.backgroundColor = self.backgroundColor.withAlphaComponent(0.90)
overlayView.font = UIFont.boldSystemFont(ofSize: YFCalendarOverlaySize)
overlayView.textColor = self.overlayTextColor
overlayView.alpha = 0.0
overlayView.textAlignment = .center
overlayView.translatesAutoresizingMaskIntoConstraints = false
return overlayView
}()
If I want to lazily initialize some variable with some default value. I can only use the 2nd way. But that seems too clumsy. So, I use the following method to initialize the lazy var. It runs ok. But is it really okay? I want some help.
class SomeViewController: UIViewController {
lazy var someViews: UILabel = self.initSomeViews()
override func viewDidLoad() {
print(self.someViews)
}
}
fileprivate extension SomeViewController {
func initSomeViews() -> UILabel! {
let overlayView = UILabel()
overlayView.backgroundColor = UIColor.white.withAlphaComponent(0.90)
overlayView.font = UIFont.boldSystemFont(ofSize: YFCalendarOverlaySize)
overlayView.alpha = 0.0
overlayView.textAlignment = .center
overlayView.translatesAutoresizingMaskIntoConstraints = false
return overlayView
}
}