Методы вызова типа в методе экземпляра - программирование
Подтвердить что ты не робот

Методы вызова типа в методе экземпляра

Apple имеет хорошее объяснение методов типа (класса) здесь.

Однако их пример выглядит так:

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

Я вижу, что этот тот же самый пример высевается везде.

Однако мне нужно вызвать мой метод типа из экземпляра моего класса и который, похоже, не вычисляется.

Я ДОЛЖЕН делать что-то неправильно, но я заметил, что Apple еще не поддерживает свойства класса:( Мне интересно, буду ли я собираться в сухую воду для воды.

Вот что я пробовал (на игровой площадке):

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()

Кто-нибудь знает меня?

4b9b3361

Ответ 1

var staticRet:String = ClassA.staticMethod()

Это работает. Он не принимает никаких параметров, поэтому вам не нужно передавать их. Вы также можете получить ClassA динамически следующим образом:

Swift 2

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

Swift 3

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

Ответ 2

В Swift 3 вы можете использовать:

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