我想知道我是否可以稍后在代码中为VAR分配值
var myView: UIView
func createView() {
myView = UIView() {
let _view = UIView()
... do more stuff ...
return _view
}()
}
是处理var的常用方法吗?
答案 0 :(得分:1)
如果你的意思是想要懒惰地返回一个视图,那么这样做的方法是使用一个懒惰的属性。
lazy var myView: UIView = {
let view = UIView()
// configure the view
return view
}()
这会在要求时创建myView。闭包仅运行一次,因此在创建它之后,要求myView
属性将返回您已创建的视图,而不是新视图。
答案 1 :(得分:0)
来自Swift编程语言指南的Initialization section:
类和结构必须将其所有存储属性设置为 适当的初始值,当该类的实例或 结构已创建。存储的属性不能留在 不确定的状态。
这意味着您必须在声明变量或在初始化程序中指定值时立即提供默认值。
如果您的变量是Optional
,则在使用变量之前您不需要指定值:
var myView: UIView?
在这种情况下,myView
默认为nil
(意味着它没有值)。
另一种选择是使用惰性初始化,正如Abizern的答案中已经指出的那样。
如果在声明变量或在初始化程序内部时无法初始化变量,但在第一次使用它之前确定它将具有值,则可以将其声明为隐式变量展开可选,并在使用时自动解包:
var myView: UIView!
如果您在初始化之前意外尝试访问变量的(不存在的)值,这可能导致崩溃 - IUO毕竟是Optionals,因此myView
仍将默认为{{1} }。