swift – 在Int扩展上调用mutating func
发布时间:2020-12-14 04:40:58 所属栏目:百科 来源:网络整理
导读:在命令行应用程序中创建了一个扩展.当我尝试调用calc方法时,它将无法工作.调用desc有效. 我错过了什么? protocol Calculatable { var desc:String { get } mutating func calc()}class MyClass : Calculatable { var desc:String = "MyClass" func calc() {
在命令行应用程序中创建了一个扩展.当我尝试调用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 解决方法
那是因为7是常数.如果您首先将其存储在变量中,则可以执行此操作:
var number = 10 number.calc() 注意:您获得的错误不是一个非常好的错误.斯威夫特肯定在这方面有一些工作要做.真正的错误是你试图在一个不可变的实例上调用一个mutating方法 你可以做的是使它成为常规方法并返回一个新值而不是试图改变self: extension Int: Calculatable { var desc: String { return "hi" } func calc() -> Int { return self + 10 } } 7.calc() // 17 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |