我有一个关于swift中变量初始化的问题。
我有两种方法来初始化一个变量(在Objective-C中作为类的“属性”)。
他们中哪一个是最正确的?
class Class {
var label: UILabel!
init() { ... label = UILabel() ... }
}或
class Class {
var label = UILabel()
init() { … }
}发布于 2016-11-07 16:10:56
实际上,你有5种初始化属性的方法。
没有正确的方法,方法取决于需要。
基本上声明像UILabel这样的对象总是-如果可能的话-作为常量(let)。
这5种方式是:
声明行中的
让label = UILabel(frame:...
init方法中,您不必将该属性声明为隐式取消包装可选。让标签: UILabel init() { ...label = UILabel(frame: ... ) ... }
前两种方法实际上是相同的。
viewDidLoad这样的方法中,在这种情况下,您必须将属性声明为(隐式取消包装) optional,也声明为varvar标签: UILabel!在viewDidLoad()上...}
let标签: UILabel ={ lbl = UILabel(frame:...)lbl.text = "Foo“return lbl }()使用闭包进行
该属性必须声明为var
让labelText = "Bar“惰性变量标签: UILabel ={ lbl = UILabel(frame:...)lbl.text = "Foo“+ self.labelText return lbl }()
发布于 2016-11-07 16:00:56
这两种方法都是正确的,但有时您应该使用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 documentation
发布于 2016-11-07 16:13:02
var label: UILabel! 上面的语句意味着,变量标签可以为空
var label = UILabel()但在这里,它将保存一个标签值。因为内存是为该变量分配的。因此,它不会为零。
请在此处找到更多详细信息
What's the difference between var label: UILabel! and var label = UILabel( )?
https://stackoverflow.com/questions/40460118
复制相似问题