2014-06-29 17 views
50

Apple ma ładne wyjaśnienie metod Type (Class): Here.Metody typu wywoływania w ramach metody instancji

Jednak ich przykład wygląda następująco:

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

widzę dokładnie ten sam przykład parroted wszędzie.

Muszę jednak wywołać moją metodę typu z instancji mojej klasy, która nie wydaje się być obliczana.

muszę robić coś złego, ale zauważyłem, że Apple nie obsługuje jeszcze właściwości klasy :(. Zastanawiam się, czy idę do Drywell dla wody.

Oto co próbowałem (w plac zabaw dla dzieci):.

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

Czy ktoś ma pojęcia dla mnie

Odpowiedz

83
var staticRet:String = ClassA.staticMethod() 

To działa nie potrzeba żadnych parametrów, dzięki czemu nie trzeba przekazać w dowolny można również. zdobyć klasę Dynamicznie tak:

Swift 2

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

Swift 3

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

Jesteś absolutnie poprawne. Nie mam pojęcia, dlaczego nie próbowałem tego. Sprawdzę cię, gdy tylko minie limit czasu, Speedy Gonzales. –

+0

Właśnie zdałem sobie sprawę, dlaczego nie próbowałem tego. Autouzupełnianie wymaga wstawienia instancji ClassA tam, kiedy to robię. Nie wiem, dlaczego ... –

+2

self.dynamicType.staticMethod() nie działa dla mnie. –

54

w Swift 3 można użyć:

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

Dzięki! Doceniam wskazówkę. –

+2

Działa, ale ktoś inny, kto myśli, że to jest brzydkie? –

+0

Rzeczywiście, to, co robię, to: 'let me = type (of: self)', a następnie 'me.staticMethod()' –

Powiązane problemy