-1

我们可以在 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
    }

一切正常。有什么不同吗?希望您能帮助理解这一点。

let我知道变量定义和var变量定义之间的区别。网点也一样吗?怎么看出outlet的区别

4

2 回答 2

2

在您的示例中,您正在考虑使用varvs.let来声明属性本身,以及在初始化该属性的闭包内。在回答您的问题时,底线是您可以使用的任何地方let(对于常量),理论上您可以使用var(对于变量),但只有在您计划稍后更改该变量时才应该这样做。在引用类型的情况下,例如UILabel,这意味着如果您打算用一个全新的实例替换该标签UILabel

因此,第一个和第四个选项 where varwas used 在闭包内,可以作为糟糕的编程风格而被忽略,因为您不会在闭包范围内再次更改它,所以我们知道我们应该let在闭包内使用。关于第二个或第三个选项(即属性本身应该是常量还是变量),问题是您以后是否会UILabel用另一个选项替换它。如果是这样,您必须使用第三个选项。但是我们可以怀疑这不太可能是您的意图,因此如果您以后不打算替换该标签,那么在这四个选项中,您会支持let/的第二个选项let


话虽如此,这看起来像是在视图控制器中,我不建议在视图控制器的实例化过程中实例化任何视图对象。通常这是推迟到viewDidLoad或者如果整个视图层次结构是以编程方式构建的,在loadView. 或者,更好的是,我们摆脱手动构建控件的业务,让故事板IBOutlet在适当的时间实例化引用。

于 2017-05-09T04:09:32.813 回答
0

let: letSwift 中的关键字用于声明常量值,而 immutable 一旦定义就永远无法更改。

let name ="Kirit" 

在您可以更改name = "Modi"之后,您会遇到编译器错误。let因此,使用关键字仅一次声明其值。

var: var关键字在 Swift 中是可变的,用于声明变量值。该值可以在运行时更改。这意味着可以更改它太多次。

var name = "Kirit" 

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

于 2017-05-09T04:03:44.697 回答