此问题已在此处有答案:
What is the difference between let
and var
in Swift?(32个回答)
6年前关闭。
我们可以像下面这样在swift中以编程方式定义和设置约束。我用四种不同的方式创造了四个品牌。如下所示
var labelone : UILabel = {
var label = UILabel()
label.text = "Stack"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
let labeltwo : UILabel = {
let label = UILabel()
label.text = "Overflow"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var labelthree : UILabel = {
let label = UILabel()
label.text = "Confused"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
let labelfour: UILabel = {
var label = UILabel()
label.text = "More confused"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
func addconstaraints() {
labelone.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
labelone.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
labelone.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
labeltwo.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
labeltwo.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
labeltwo.topAnchor.constraint(equalTo: labelone.bottomAnchor).isActive = true
labelthree.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
labelthree.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
labelthree.topAnchor.constraint(equalTo: labeltwo.bottomAnchor).isActive = true
labelfour.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
labelfour.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
labelfour.topAnchor.constraint(equalTo: labelthree.bottomAnchor).isActive = true
}
一切正常。有什么不同吗?希望你的帮助来理解这一点。
我知道变量define的let
和var
的区别。插座也一样吗?我们怎么能看出插座的不同呢
2条答案
按热度按时间dy1byipe1#
在您的示例中,您考虑使用
var
与let
在声明属性本身时,以及在初始化该属性的闭包中。回答你的问题,底线是,在任何可以使用let
(用于常量)的地方,理论上都可以使用var
(用于变量),但只有在计划稍后更改该变量时才应该这样做。对于引用类型,如UILabel
,这意味着如果您计划用一个全新的UILabel
示例替换该标签。所以,第一个和第四个选项,在闭包内部使用
var
,可以被视为糟糕的编程风格,因为你不会在闭包的范围内再次更改它,所以我们知道我们应该在闭包内部使用let
。关于第二或第三选项(即属性本身应该是常量还是变量),问题是以后是否要用另一个UILabel
替换它。如果是这样的话,你必须使用第三个选项。但是我们可以怀疑这不太可能是您的意图,因此如果您不打算在以后替换该标签,在这四个选项中,您会倾向于第二个选项let
/let
。话虽如此,这看起来像是在一个视图控制器中,我不建议在视图控制器的示例化过程中示例化任何视图对象。通常这会延迟到
viewDidLoad
,或者如果整个视图层次结构是以编程方式构建的,则在loadView
中。或者,更好的是,我们摆脱了手动构建控件的业务,让故事板在适当的时候示例化IBOutlet
引用。zdwk9cvp2#
let
:Swift中的let
关键字用于声明常量值,一旦定义,immutable就永远不能更改。当你可以改变
name = "Modi"
,然后你得到编译器错误。因此,只使用let
关键字声明一次它的值。var
:var
关键字是可变的,在Swift中用于声明变量值。该值可以在运行时更改。意思是可以改变太多次。您可以更改
name = "Modi"
,然后成功更新变量的值。