在命令行应用中创建扩展程序。当我尝试调用calc方法时,它不会起作用。调用desc工作。
我错过了什么?
protocol Calculatable {
var desc:String { get }
mutating func calc()
}
class MyClass : Calculatable {
var desc:String = "MyClass"
func calc() {
desc += " is great"
}
}
extension Int: Calculatable {
var desc:String { return "hi" }
mutating func calc() {
self += 10
}
}
7.desc // works
7.calc() // Compiler error: could not find member calc
答案 0 :(得分:5)
那是因为7
是常数。如果您首先将其存储在变量中,则可以执行此操作:
var number = 10
number.calc()
注意:您获得的错误不是一个非常好的错误。斯威夫特肯定在这方面有一些工作要做。真正的错误是你试图在一个不可变的实例上调用一个mutating方法
你可以做的是使它成为常规方法并返回一个新值,而不是试图改变自我:
extension Int: Calculatable {
var desc: String { return "hi" }
func calc() -> Int {
return self + 10
}
}
7.calc() // 17