[英]Swift Variables Initialization
我有一個關於swift變量初始化的問題。
我有兩種方法來初始化變量(作為Objective-C中類的“屬性”)。
哪個是最正確的?
class Class {
var label: UILabel!
init() { ... label = UILabel() ... }
}
要么
class Class {
var label = UILabel()
init() { … }
}
實際上,您有5種方法來初始化屬性。
沒有正確的方法,方式取決於需求。
基本上聲明像UILabel
這樣的對象 - 如果可能的話 - 作為常量( let
)。
5種方式是:
聲明行中的初始化
let label = UILabel(frame:...
在init
方法中init
,您不必將該屬性聲明為隱式unwrapped可選項。
let label: UILabel init() { ... label = UILabel(frame:...) ... }
前兩種方式實際上是相同的。
在viewDidLoad
類的方法中進行初始化,在這種情況下,您必須將屬性聲明為(implicit unwrapped)可選,並且也作為var
var label: UILabel! on viewDidLoad() ... label = UILabel(frame:...) }
使用閉包進行初始化以分配默認(計算)值。 在初始化類時調用閉包,並且不可能在閉包中使用該類的其他屬性。
let label: UILabel = { let lbl = UILabel(frame:...) lbl.text = "Foo" return lbl }()
使用閉包進行延遲初始化。 在第一次訪問屬性時調用(一次)閉包,您可以使用該類的其他屬性。
該屬性必須聲明為var
let labelText = "Bar" lazy var label: UILabel = { let lbl = UILabel(frame:...) lbl.text = "Foo" + self.labelText return lbl }()
兩種方式都是正確的,但有時你應該在init()
方法中使用初始化。 例如,這里barButton的target
將不會被設置,因為self
還不存在。
class Foo {
var barButton = UIBarButtonItem(title: "add", style: .Plain, target: self, action: #selector(self.someMethod))
init(){
//init here
}
}
這種情況的正確方法是:
class Foo {
var barButton : UIBarButton?
init(){
barButton = UIBarButtonItem(title: "add", style: .Plain, target: self, action: #selector(self.someMethod))
}
}
總而言之,兩種方式都是正確的,但您必須考慮何時使用每種方法。 有關Apple文檔的更多信息
var label: UILabel!
上述陳述意味着,變量標簽可以是零
var label = UILabel()
但在這里它將持有標簽價值。 因為內存是為該變量分配的。 所以它不會是零。
請在此處查找更多詳細信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.