Chcę móc zapisać klasę jako zmienną, więc mogę później wywołać z niej metody klasy, coś takiego:Przekaż klasę Swift jako parametr, a następnie wywołaj z niej metodę klasy.
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)
{
...
}
}
Chcę móc powiedzieć coś takiego:
let someGenericItem = SomeGenericItem(cellClass: SomeClass.self)
someGenericItem.doSomething("One", p2: "Two", p3: "Three")
Co próbuję dowiedzieć się:
1) W jaki sposób protokół być zdefiniowany tak mogłem zadzwonić klasa func doSomething ?
2) Jaka powinna być deklaracja cellClass?
3) Jak wyglądałaby rozmowa?
jestem znalezieniem to działa, ale z dziwnym problemem. Mogę to tylko uruchomić, jeśli FooProtocol jest w tym samym pliku co wywołanie "let fooishTypeWrapper = FooTypeWrapper (type: FooishClass.self)". Jeśli znajduje się w innym pliku, Swift skarży się na deklarację "class FooishClass: FooProtocol", która mówi, że "Type" Foolish Class "nie jest zgodna z protokołem" Foo Protocol "", mimo że tak. Jedyna różnica polega na tym, w jakim pliku znajduje się protokół. To spowodowało, że raz zastosowałem to podejście, ale jak tylko spróbuję użyć go w wielu plikach, nie mogę się skompilować. Jakieś pomysły? –
Wystarczy dwukrotnie sprawdzić, działa absolutnie dobrze. Prawdopodobnie masz gdzieś literówkę - opublikuj swój kod, jeśli problem będzie się powtarzał. – Gregzo
"Protokoły nie mogą definiować metod klasowych" To nie jest prawda. Protokoły deklarują * wymagania metody * z 'statycznym'. Wymagania dotyczące metod typu mogą być spełnione przez klasy przy użyciu metod klas lub metod statycznych. – newacct