voglio essere in grado di memorizzare una classe come variabile, in modo da poter chiamare i metodi della classe fuori di esso più tardi, qualcosa di simile:passare una classe Swift come parametro, e quindi chiamare un metodo di una classe fuori di esso
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)
{
...
}
}
voglio essere in grado di dire qualcosa del tipo:
let someGenericItem = SomeGenericItem(cellClass: SomeClass.self)
someGenericItem.doSomething("One", p2: "Two", p3: "Three")
Quello che sto cercando di capire è:
1) Come sarebbe un protocollo definito così ho potuto chiamare classe func doSomething ?
2) Quale dovrebbe essere la dichiarazione di cellClass?
3) Come apparirebbe la chiamata?
Sto trovando questo funziona, ma con un problema strano. Posso farlo funzionare solo se FooProtocol si trova nello stesso file della chiamata a "let fooishTypeWrapper = FooTypeWrapper (type: FooishClass.self)". Se si trova in un file diverso, Swift si lamenta della dichiarazione di "classe FooishClass: FooProtocol" che dice "Tipo" Foolish Class "non conforme al protocollo" Foo Protocol "", anche se lo fa. L'unica differenza è il file in cui è presente il protocollo. Ciò mi ha indotto a far funzionare questo approccio una volta, ma non appena riesco a utilizzarlo in più file non riesco a compilare. Qualche idea? –
Appena ricontrollato, funziona perfettamente. Probabilmente hai un errore di battitura da qualche parte - inserisci il tuo codice se il problema persiste. – Gregzo
"I protocolli non possono definire i metodi di classe" Questo non è vero. I protocolli dichiarano * requisiti del metodo di tipo * con 'static'. I requisiti del tipo di metodo possono essere soddisfatti dalle classi utilizzando metodi di classe o metodi statici. – newacct