Swift Variables Initialization
Actually you have 5 ways to initialize properties.
There is no correct way, the way depends on the needs.
Basically declare objects like UILabel
always – if possible – as constant (let
).
The 5 ways are:
Initialization in the declaration line
let label = UILabel(frame:...
Initialization in the
init
method, you don't have to declare the property as implicit unwrapped optional.let label: UILabel init() { ... label = UILabel(frame:...) ... }
The first two ways are practically identical.
Initialization in a method like
viewDidLoad
, in this case you have to declare the property as (implicit unwrapped) optional and also asvar
var label: UILabel! on viewDidLoad() ... label = UILabel(frame:...) }
Initialization using a closure to assign a default (computed) value. The closure is called once when the class is initialized and it is not possible to use other properties of the class in the closure.
let label: UILabel = { let lbl = UILabel(frame:...) lbl.text = "Foo" return lbl }()
Lazy initialization using a closure. The closure is called (once) when the property is accessed the first time and you can use other properties of the class.
The property must be declared asvar
let labelText = "Bar" lazy var label: UILabel = { let lbl = UILabel(frame:...) lbl.text = "Foo" + self.labelText return lbl }()
Alexander Kuzyaev
7+ years of remote iOS hands-on experience. 2+ years of team leading & engineering management. Built products for 1+ million users. Areas: e-commerce, finance, social Swift, SwiftUI, UIKIt, Objective-C
Updated on June 04, 2022Comments
-
Alexander Kuzyaev almost 2 years
I have a question about variables initialization in swift.
I have two ways to initialize a variable (as "property" of a class in Objective-C).
Which of them is the most correct?
class Class { var label: UILabel! init() { ... label = UILabel() ... } }
or
class Class { var label = UILabel() init() { … } }