如何在 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 录制视频期间将麦克风静音/取消静音

如何使 fx cop 警告 CS0067 静音?

Swift 3 如何覆盖静音模式并从后台播放音频

如何选择性地静音 Rails 3 弃用警告?

如何使用 Swift 2(Xcode 7)在我的 Sprite Kit 游戏中为背景音乐设置静音按钮?

Swift AVAudioEngine - 如何使本地麦克风静音