Ich möchte eine Klasse als Variable speichern zu können, so kann ich später aus ihm heraus Klassenmethoden nennen, etwa wie folgt:Pass eine Swift-Klasse als Parameter, und dann eine Klassenmethode es aus anrufen
class SomeGenericItem: NSObject
{
var cellClass: AnyClass
init(cellClass: AnyClass)
{
self.cellClass = cellClass
}
func doSomething(p1: String, p2: String, p3: String)
{
self.cellClass.doSomething(p1, p2: p2, p3: p3)
}
}
class SomeClass: NSObject
{
class func doSomething(p1: String, p2: String, p3: String)
{
...
}
}
ich möchte in der Lage sein, etwas zu sagen wie:
let someGenericItem = SomeGenericItem(cellClass: SomeClass.self)
someGenericItem.doSomething("One", p2: "Two", p3: "Three")
Was ich versuche, herauszufinden:
1) Wie würde ein Protokoll definiert werden, so dass ich Klasse func doSomething nennen ?
2) Was müsste die Deklaration von cellClass sein?
3) Wie würde der Anruf aussehen?
Ich finde das funktioniert, aber mit einem seltsamen Problem. Ich kann das nur funktionieren, wenn das FooProtocol in der gleichen Datei ist wie der Aufruf von "let fooishTypeWrapper = FooTypeWrapper (type: FooishClass.self)". Wenn es in einer anderen Datei ist, beschwert sich Swift über die Deklaration von "Klasse FooishClass: FooProtocol" und sagt: "Type 'Foolish Class' entspricht nicht dem Protokoll 'Foo Protocol'", obwohl es dies tut. Der einzige Unterschied ist, in welcher Datei das Protokoll ist. Dies hat mich dazu gebracht, diesen Ansatz einmal zu funktionieren, aber sobald ich versuche, es in mehreren Dateien zu verwenden, kann ich nicht kompilieren. Irgendwelche Ideen? –
Nur doppelt überprüft, funktioniert absolut gut. Wahrscheinlich hast du irgendwo einen Tippfehler - poste deinen Code, wenn das Problem weiterhin besteht. – Gregzo
"Protokolle können Klassenmethoden nicht definieren" Das ist nicht wahr. Protokolle deklarieren * Typ Methodenanforderungen * mit 'static'. Typemethodanforderungen können durch Klassen erfüllt werden, die entweder Klassenmethoden oder statische Methoden verwenden. – newacct