加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读