Ho il seguente scenario:Typecasting e dove nel ciclo for
protocol A {}
protocol B: A {}
protocol C: A {}
let objects: [A] = ...
come posso ciclo attraverso l'array ed eseguire solo la logica per gli oggetti che sono di tipo B
?
In questo momento, sto facendo qualcosa di simile:
for object in objects {
if let b = object as? B {
...
}
}
ma mi chiedevo se posso usare where
per rendere questo più espressivo ed elegante.
for b in objects where b is B // <- compiles, but b is typed as A, not B
for b: B in objects where b is B // <- doesn't compile
for b in objects as! [B] where b is B // <- I get a warning that "is" will always be true
Se 'protocolloB' definirebbe una funzione' test() ', non si sarebbe in grado di chiamarlo su' object' nella propria iterazione senza typecasting 'object' a' protocolB', perché 'object' è di tipo 'AnyObject', non di tipo' protocolloB'. – rid
Nel codice aggiornato, se provi a chiamare 'print (object.test())' nel ciclo che hai commentato, riceverai un errore ('AnyObject' non ha un membro chiamato 'test()'). – rid
Funziona perfettamente con Xcode7. Compreso 'print (oggetto)'. Questo è stato solo commentato perché era un esempio – simons