微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 在Int扩展上调用mutating func

在命令行应用程序中创建了一个扩展.当我尝试调用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐