引用类型的let和var之间有什么区别,当我们在ios中以编程方式创建IBOutlet时,swift [duplicate]

bvuwiixz  于 2023-05-16  发布在  Swift
关注(0)|答案(2)|浏览(115)

此问题已在此处有答案

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的letvar的区别。插座也一样吗?我们怎么能看出插座的不同呢

dy1byipe

dy1byipe1#

在您的示例中,您考虑使用varlet在声明属性本身时,以及在初始化该属性的闭包中。回答你的问题,底线是,在任何可以使用let(用于常量)的地方,理论上都可以使用var(用于变量),但只有在计划稍后更改该变量时才应该这样做。对于引用类型,如UILabel,这意味着如果您计划用一个全新的UILabel示例替换该标签。
所以,第一个和第四个选项,在闭包内部使用var,可以被视为糟糕的编程风格,因为你不会在闭包的范围内再次更改它,所以我们知道我们应该在闭包内部使用let。关于第二或第三选项(即属性本身应该是常量还是变量),问题是以后是否要用另一个UILabel替换它。如果是这样的话,你必须使用第三个选项。但是我们可以怀疑这不太可能是您的意图,因此如果您不打算在以后替换该标签,在这四个选项中,您会倾向于第二个选项let/let
话虽如此,这看起来像是在一个视图控制器中,我不建议在视图控制器的示例化过程中示例化任何视图对象。通常这会延迟到viewDidLoad,或者如果整个视图层次结构是以编程方式构建的,则在loadView中。或者,更好的是,我们摆脱了手动构建控件的业务,让故事板在适当的时候示例化IBOutlet引用。

zdwk9cvp

zdwk9cvp2#

let:Swift中的let关键字用于声明常量值,一旦定义,immutable就永远不能更改。

let name ="Kirit"

当你可以改变name = "Modi",然后你得到编译器错误。因此,只使用let关键字声明一次它的值。
varvar关键字是可变的,在Swift中用于声明变量值。该值可以在运行时更改。意思是可以改变太多次。

var name = "Kirit"

您可以更改name = "Modi",然后成功更新变量的值。

相关问题