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

时间:2014-12-20 05:00:48

标签: ios swift swift-extensions

我现在正在学习Swift语言。

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

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

所以我刚刚调用了adjust()

7.adjust()

它会抛出错误:

Immutable value of type `Int` only has mutating members named adjust.

Swift Error

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

1 个答案:

答案 0 :(得分:7)

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

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

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

var myNum = 7
myNum.adjust()
println(myNum) // 49

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

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