【问题标题】:How to mute the warning of "never mutated" in Swift? [duplicate]如何在 Swift 中静音“从不变异”的警告? [复制]
【发布时间】:2017-09-27 23:07:40
【问题描述】:

关于重复标志: 这个问题与标记的问题不同,因为我不知道 Swift 的概念,所以我询问如何使警告静音。下面提供的答案有助于我理解 Swift 的基本性质。因此,此问题不应标记为重复。


我有一个类名 Person 有以下变量。

private var _id:String = ""
var id:String {
    get {
        return _id
    }
    set (newId) {
        _id = newId
    }
}

private var _name:String = ""
var name:String {
    get {
        return _name
    }
    set (newName) {
        _name = newName
    }
}

private var _signedDate:Date? = nil
var signedDate:Date {
    get {
        return _signedDate!
    }
    set(newDate) {
        _signedDate = newDate
    }
}

这些私有变量将使用 setter 进行更新。

所以在为Person 类创建对象时,我正在编写这段代码。

var p1 = Person()
p1.id = "1"
p1.name = "Hemang"

array.append(p1)

也许稍后,我会用一个 setter 更新 signedDate 的值。

所以我不应该用let 创建这个对象。

但是,它向我显示了这个警告:

变量“p1”从未发生变异;考虑更改为 'let' 常量。

如何消除此警告?

如果您需要这方面的更多信息,请告诉我。

【问题讨论】:

  • 你为什么不展示你的二传手?
  • 警告是不言自明的
  • Google 中的“Swift3 值与引用类型”以了解更多信息。
  • 不相关但带有自定义 setter 和 getter 的私有后备变量在 Swift 中是无稽之谈。这不是(Objective-)C。

标签: swift var let


【解决方案1】:

因为实际上你并没有改变 Person 对象, 使用let,您可以更改对象的properties。但是您不能自行更改object

因此,将您的代码更改为警告引导您的内容。

当然,你可以在问这个问题之前尝试一下。

【讨论】:

  • 谢谢,Hamed,你让我对 Swift 产生了深深的怀疑。我以为我们不能改变一个类的常量对象的成员变量。
  • @Hemang 你不能改变一个常量结构的属性,但是你可以改变一个类,只要你不改变引用本身(也就是说,你可以改变任何对象的属性,但您不能将其指向不同的对象)。这是值类型和引用类型的区别之一。
猜你喜欢
  • 2016-04-18
  • 2018-11-20
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多