Domanda Tipo di classe di casting


So che è possibile definire la proprietà della classe che risponde a un determinato protocollo, come:

Class <MyProtocol> class = [object class];

Ma c'è qualche modo in Objective-C per lanciare il tipo di classe nella mia classe?

Class unknownClass = [object class];
[((MyClass)unknownClass) myMethod]; // How can I cast Class to MyClass?

16
2018-03-21 17:08


origine


risposte:


Quello che stai chiedendo in realtà non ha alcun senso.

unknownClass punta a a oggetto di classe. Class è solo un tipo che può contenere qualsiasi puntatore a un oggetto di classe. Si chiama un metodo di classe inviando un messaggio all'oggetto classe.

Class, piace id, disattiva il controllo del tipo statico. Ciò significa che il compilatore non si lamenterà che l'oggetto potrebbe non rispondere al metodo. Quindi dovresti solo inviare un messaggio. "Casting" non ha alcun senso. Se ricevi un errore che non esiste un'interfaccia che dichiari questo metodo, hai un problema completamente non correlato che non ha nulla a che fare con i tipi; invece il metodo non è dichiarato in nessuna intestazione visibile.

Dici nei commenti ad un'altra risposta che "So che 'unknownClass' è in realtà di tipo MyClass." Questo rende la tua domanda ancora meno sensata - perché non usare solo MyClass direttamente allora? invece di unknownClass? Piace [MyClass myMethod];


5
2018-03-21 19:24



obj->isa = [NewClass class];

Questo dovrebbe cambiare la classe di un oggetto.

Quando lo farò, confido che tu sappia cosa stai facendo.


-2
2018-03-21 17:38