2014-06-29 26 views
50

Apple hat eine schöne Erklärung der Methoden des Typs (Klasse) Here.Aufruf von Methoden innerhalb einer Instanz Methode

jedoch ihr Beispiel sieht wie folgt aus:

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

Ich sehe das genau das gleiche Beispiel überall parroted.

Allerdings muss ich meine Type-Methode innerhalb einer Instanz meiner Klasse aufrufen, und das scheint nicht zu berechnen.

ich etwas falsch sein muss, aber ich merkte, dass Apple noch keine Klasseneigenschaften unterstützt :(. Ich frage mich, wenn ich zu einem Blockkalibrators für Wasser werde.

Hier ist, was ich versucht habe (in ein Spielplatz):.

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

ist für mich eine Ahnung jemand

Antwort

83
var staticRet:String = ClassA.staticMethod() 

Dies funktioniert Es dauert keine Parameter, so dass Sie in jedem passieren müssen auch nicht möglich. Klasse bekommen Ein dynamisch wie folgt aus:

Swift 2

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

Swift 3

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

Sie sind absolut richtig. Ich habe keine Ahnung, warum ich das nicht versucht habe. Ich werde Sie greencheck, sobald das Zeitlimit abgelaufen ist, Speedy Gonzales. –

+0

Ich habe gerade realisiert, warum ich das nicht versucht habe. Die automatische Füllung besteht darauf, eine ClassA-Instanz dort einzufügen, wenn ich das tue. Nicht sicher warum ... –

+2

self.dynamicType.staticMethod() hat nicht für mich funktioniert. –

54

In Swift 3 Sie verwenden können:

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

Vielen Dank! Ich schätze den Tipp. –

+2

Funktioniert, aber jemand anderes, der das für hässlich hält? –

+0

In der Tat, was ich tue ist: 'Let me = type (of: self)' und dann 'me.staticMethod()' –

Verwandte Themen