为什么我不能从类方法调用协议方法?

时间:2016-03-12 20:10:01

标签: swift

如果我将tester()方法设为实例方法,则下面的代码编译得很好。如何在保持类方法的同时使其工作?

protocol Numbers {
}

extension Numbers {
    func amountFromText(text: String) -> Int {
        return 0
    }
}

class CommonDB: Numbers {
    class func tester() {
        let text = ""
        let amount = amountFromText(text)
    }
}

1 个答案:

答案 0 :(得分:0)

在协议中定义函数的方式意味着它将是一个实例函数,也就是说,您需要一个类或结构的实例才能调用该函数。当您在类函数中时,您没有该类的实例。

如果要从类函数中调用amountFromText(),请将其声明为static。这样,它不需要调用类或结构的实例:

extension Numbers {
    static func amountFromText(text: String) -> Int {
        return 0
    }
}