Prima di tutto: scusa per il titolo, ma non ho ora come formulare meglio il significato della mia domanda successiva in una singola frase.
Mentre stavo scrivendo il seguente codice Swift
:
if errorData.isMemberOfClass(UIAlertController) {
self.presentViewController(errorData, animated: true, completion: nil)
} else {
/* Some other code */
}
per il mio progetto personale il compilatore mi ha dato questo errore:
'AnyObject' is not convertible to 'UIAlertController'; did you mean to use 'as!' to force downcast?
e non mi lascerà più compilare il compilatore se non cambierò il mio codice in questo:
if errorData.isMemberOfClass(UIAlertController) {
self.presentViewController(errorData as! UIAlertController, animated: true, completion: nil)
} else {
/* Some other code */
}
Ma non capisco: se faccio in modo che il programma controlli la classe di errorData
(che, per essere precisi, è di classe AnyObject
) usando if statement
perché mi costringe a forzare il downcast contro il tipo di classe dovrebbe essere all'interno di if
?
In altre parole: il compilatore non sa già che all'interno dell'istruzione errorData è UIAlertController
? Se invece il programma non è proseguito nella parte else, così errorData potrebbe anche essere di classe Int
o String
per esempio