在实例方法中调用类型方法

时间:2014-06-29 01:25:18

标签: ios class methods types swift

Apple对类型(类)方法Here有很好的解释。

然而,他们的例子如下:

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.typeMethod()

我看到这个完全相同的例子到处都是。

但是,我需要从我的类的一个实例中调用我的Type方法,而这似乎无法计算。

我必须做错事,但我注意到Apple还没有支持Class Properties :(。我想知道我是否会去干井用水。

这是我尝试过的(在操场上):

class ClassA
{
    class func staticMethod() -> String { return "STATIC" }

    func dynamicMethod() -> String { return "DYNAMIC" }

    func callBoth() -> ( dynamicRet:String, staticRet:String )
    {
        var dynamicRet:String = self.dynamicMethod()
        var staticRet:String = ""

//        staticRet = self.class.staticMethod() // Nope
//        staticRet = class.staticMethod() // No way, Jose
//        staticRet = ClassA.staticMethod(self) // Uh-uh
//        staticRet = ClassA.staticMethod(ClassA()) // Nah
//        staticRet = self.staticMethod() // You is lame
//        staticRet = .staticMethod() // You're kidding, right?
//        staticRet = this.staticMethod() // What, are you making this crap up?
//        staticRet = staticMethod()  // FAIL

        return ( dynamicRet:dynamicRet, staticRet:staticRet )
    }
}

let instance:ClassA = ClassA()
let test:( dynamicRet:String, staticRet:String ) = instance.callBoth()

有没有人对我有任何线索?

3 个答案:

答案 0 :(得分:100)

var staticRet:String = ClassA.staticMethod()

这很有效。它不需要任何参数,因此您不需要传入任何参数。您还可以像这样动态获取ClassA:

Swift 2

var staticRet:String = self.dynamicType.staticMethod()

Swift 3

var staticRet:String = type(of:self).staticMethod()

答案 1 :(得分:57)

在Swift 3中,您可以使用:

let me = type(of: self)
me.staticMethod()

答案 2 :(得分:0)

我想为这个老问题再加一个曲折。

在当今的Swift中(我认为将其切换为4,但我不确定),我们已经将type(of: self)替换为Self(注意大写字母“ S”)。