[英]Initializing property via closure
我觀察到人們有時使用閉包來初始化屬性。 例如代替
lazy var test1: String = String("a string")
他們使用
lazy var test2: String = { String("a string") }()
使用閉包初始化屬性有什么好處/方便?
這兩個做同樣的工作。 當您需要額外的代碼來配置屬性對象時,閉包初始化就派上用場了。 例如:
lazy var point: CGPoint = {
let x = ...
let y = ...
return CGPoint(x: x, y: y)
}()
一般來說,如果惰性變量在初始化之后不需要額外的工作,那么在沒有閉包初始化的情況下聲明它就足夠了。
例如,對於一個簡單的字符串,實現是公平的:
lazy var myString = "a string"
然而,當涉及到需要更多編輯(設置)的東西時——例如CLLocationManager
,你自然會使用閉包初始化:
lazy var locationManager: CLLocationManager = {
var lm = CLLocationManager()
// here is one extra thing to do:
lm.delegate = self
return lm
}()
如前所述,在某些時候我們需要在初始化之后做額外的步驟(在上面的例子中是lm.delegate = self
)。
參考您的情況,由於初始化后不應發生任何事情,因此兩者:
lazy var test1: String = String("a string")
和
lazy var test2: String = { String("a string") }()
是相同的。 您應該使用第一個作為速記打字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.