如何在 Swift 中静音“从不变异”的警告? [复制]
Posted
技术标签:
【中文标题】如何在 Swift 中静音“从不变异”的警告? [复制]【英文标题】:How to mute the warning of "never mutated" in Swift? [duplicate] 【发布时间】: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。 【参考方案1】:因为实际上你并没有改变 Person
对象,
使用let
,您可以更改对象的properties
。但是您不能自行更改object
。
因此,将您的代码更改为警告引导您的内容。
当然,你可以在问这个问题之前尝试一下。
【讨论】:
谢谢,Hamed,你让我对 Swift 产生了深深的怀疑。我以为我们不能改变一个类的常量对象的成员变量。 @Hemang 你不能改变一个常量结构的属性,但是你可以改变一个类,只要你不改变引用本身(也就是说,你可以改变任何对象的属性,但您不能将其指向不同的对象)。这是值类型和引用类型的区别之一。以上是关于如何在 Swift 中静音“从不变异”的警告? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:如何在使用 AVFoundation 录制视频期间将麦克风静音/取消静音