以下是否存在差异:
懒惰变量:
lazy var profileImageIsLoaded : Bool = {
return (profileImageView.image != nil) && (profileImageProgressView.alpha == 0.0)
}()
功能:
func profileImageIsLoaded() -> Bool {
return (profileImageView.image != nil) && (profileImageProgressView.alpha == 0.0)
}
计算财产:
var profileImageIsLoaded : Bool {
return (profileImageView.image != nil) && (profileImageProgressView.alpha == 0.0)
}
哪种方法最好用?
我会多次调用函数/变量,所以我的问题也是懒惰的变量是否已更新"或者他们是否只获得一次价值。
答案 0 :(得分:15)
lazy var
实际上是存储的属性,因此您无法将其放入扩展程序或不允许存储属性的任何位置。lazy var
的getter仅在首次引用该属性时运行,并且永远不会再次运行。lazy var
是变量。你可以改变它们。()
。答案 1 :(得分:9)
第一个:
lazy var profileImageIsLoaded : Bool = {
return (profileImageView.image != nil) && (profileImageProgressView.alpha == 0.0)
}()
profileImageIsLoaded
是一个存储属性,使用闭包进行懒惰初始化,一旦初始化变量,就不再调用此闭包,并且将返回第一次调用闭包时所采用的值。 / p>
第二个:
func profileImageIsLoaded() -> Bool {
return (profileImageView.image != nil) && (profileImageProgressView.alpha == 0.0)
}
是正常的函数声明,这只是声明。如果您想调用该功能,您可以这样做:profileImageIsLoaded()
。
第三个:
var profileImageIsLoaded : Bool {
return (profileImageView.image != nil) && (profileImageProgressView.alpha == 0.0)
}
profileImageIsLoaded
是一个计算属性,每次访问此属性时,都会计算并返回它。
选择使用哪一个总取决于您的情况。