Apple, дает нам пример понижающее приведение объекта одного и того же типа, как, например:Как сбрасывать объект, который может быть нескольких типов?
let someObjects: [AnyObject] = [
Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"),
Movie(name: "Moon", director: "Duncan Jones"),
Movie(name: "Alien", director: "Ridley Scott")
]
Затем мы можем получить доступ к каждому отдельному атрибуту путем создания абстрактной переменной «объекта» и приведения его в то, что мы ожидаем, что это будет (фильм):
for object in someObjects {
let movie = object as! Movie
print("Movie: '\(movie.name)', dir. \(movie.director)")
}
Но что, если мы переходим к следующему уровню и, например, у нас есть подклассы фильмов:
немого кино
Comedy
Действие
Каждый из которых все имеют одинаковые атрибуты - имя & директор
Я пытался бросить его так же, как мы делали выше, как «кино», так как я предполагал, как родительский класс, он сможет распознать свои подклассы, но, конечно, это не сработало, иначе этот вопрос не существовал бы!
Можете ли вы показать код, как вы пытались сделать подклассы таким же образом? – ronatory
Я не могу воспроизвести вашу проблему. Он отлично работает, когда я пытаюсь это сделать (не то, что это хорошая идея. Вам не нужно «AnyObject» очень часто, и вы должны избегать подклассов и down-casting, если вы можете их избежать.) В качестве комментариев покажите код, который * не работает *, а не только код, который * делает *. –
Не забудьте вернуться и принять ответ или проголосовать за ответы, которые вам помогли. – JAL