【问题标题】:Let constant seems to be mutable even after initialization [duplicate]即使在初始化之后,让常量似乎也是可变的[重复]
【发布时间】:2016-09-06 14:36:18
【问题描述】:

我来自 C++,现在正在学习 Swift,但我在理解 Swift const 概念时遇到了一些问题。这段代码来自一本 IOS 开发书籍,我很难理解为什么它会起作用。

    let firstFrame = CGRect(x: 160, y: 240, width: 100, height: 150)
    let firstView = UIView(frame: firstFrame)
    firstView.backgroundColor = UIColor.blueColor()
    view.addSubview(firstView)

据我所知:firstView 是一个常量 UIView 对象,但即使该对象是常量且已完全初始化,我也可以在下一行更改 UIView 成员的值?

我很困惑,谁能向我解释一下,因为在 C++ 中这是不可能的,还是我忽略了什么?

问候 鲁维

【问题讨论】:

  • 好的,换句话说 let on Objects 就像 C++ 中的 const 指针?不是对象本身是 const 而是持有该对象的指针。这对我来说真的很困惑,但是好的,谢谢。编辑:是否存在使对象本身也成为常量的方法?
  • 看看This

标签: swift


【解决方案1】:

这是一篇很好的文章讨论这个问题:Immutable models in Swift

简而言之,类是引用类型,也就是说:

let firstView = UIView(frame: firstFrame)

您只需确保firstView 指向的引用不会改变,内部属性可以。这是类与结构的区别,结构确保内部的值永远不会改变(除非指定为mutating,但这是题外话)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多