Ale*_*aev 6 variables initialization ios swift
我有一个关于swift变量初始化的问题.
我有两种方法来初始化变量(作为Objective-C中类的"属性").
哪个是最正确的?
class Class {
var label: UILabel!
init() { ... label = UILabel() ... }
}
Run Code Online (Sandbox Code Playgroud)
要么
class Class {
var label = UILabel()
init() { … }
}
Run Code Online (Sandbox Code Playgroud)
vad*_*ian 28
实际上,您有5种方法来初始化属性.
没有正确的方法,方式取决于需求.
基本上像UILabel往常一样声明对象- 如果可能的话 - 作为常量(let).
5种方式是:
声明行中的初始化
let label = UILabel(frame:...
Run Code Online (Sandbox Code Playgroud)在init方法初始化时,您不必将属性声明为隐式解包可选.
let label: UILabel
init() { ... label = UILabel(frame:...) ... }
Run Code Online (Sandbox Code Playgroud)前两种方式实际上是相同的.
在类似的方法中进行初始化viewDidLoad,在这种情况下,您必须将属性声明为(隐式解包)可选,也作为var
var label: UILabel!
on viewDidLoad()
...
label = UILabel(frame:...)
}
Run Code Online (Sandbox Code Playgroud)使用闭包进行初始化以指定默认(计算)值.在初始化类时调用闭包,并且不可能在闭包中使用该类的其他属性.
let label: UILabel = {
let lbl = UILabel(frame:...)
lbl.text = "Foo"
return lbl
}()
Run Code Online (Sandbox Code Playgroud)使用闭包进行延迟初始化.在第一次访问属性时调用(一次)闭包,您可以使用该类的其他属性.
该财产必须声明为var
let labelText = "Bar"
lazy var label: UILabel = {
let lbl = UILabel(frame:...)
lbl.text = "Foo" + self.labelText
return lbl
}()
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
9316 次 |
| 最近记录: |