"Int"类型的不可变值只有名为adjust的变异成员

Mid*_* MP 2 ios swift swift-extensions

我现在正在学习Swift语言.

在Apple的文档中,我看到了一个扩展示例:

extension Int: ExampleProtocol {
    var simpleDescription: String {
        return "The number \(self)"
    }
    mutating func adjust() {
        self += 42
    }
}
7.simpleDescription
Run Code Online (Sandbox Code Playgroud)

所以我就是adjust()这样说的:

7.adjust()
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

Immutable value of type `Int` only has mutating members named adjust.
Run Code Online (Sandbox Code Playgroud)

迅速错误

我不确定导致错误的原因是什么?任何人都可以帮我理解这个问题吗?

dre*_*wag 7

adjust方法被标记为mutating意味着它改变了调用方法的东西.

7是文字,所以改变它的价值是没有意义的.文字不能变异.这就是为什么错误消息表明不可变的值不能被改变的原因.

相反,您可以在变量上使用该方法(可变):

var myNum = 7
myNum.adjust()
println(myNum) // 49
Run Code Online (Sandbox Code Playgroud)

如果你在常量上尝试相同的东西,你会得到相同的错误消息,因为它也是不可变的:

let myNum2 = 7
myNum2.adjust() // Error: Immutable value of type 'Int' only has mutating members named 'adjust'
Run Code Online (Sandbox Code Playgroud)