Почему я должен понижать элемент массива в Swift, если подкласс элемента массива известен?
> class B {let t: String = "-B-"}
> class B1:B {let t1: String = "-B1-"}
> class B2:B {let t2: String = "-B2-"}
> let bunch = [B(), B1(), B2()]
Как и ожидалось:
> print(type(of:bunch))
Array<B>
Подкласс каждый элемент массива известен:
> for item in bunch {print(type(of:item))}
B
B1
B2
Тем не менее (как задокументировано) мы не можем получить доступ к члену подкласса элемента, и нам необходимо понизить класс:
> if bunch[1] is B1 {let b1 = bunch[1] as! B1; print(b1.t1)}
-B1-
потому что это не работает:
> bunch[1].t1
error: repl.swift:17:6: error: value of type 'B' has no member 't1'; did you mean 't'?
Почему Swift может определить подкласс, используя тип (of :), но не может вывести его при доступе к члену в этом подклассе? Это ошибка, историческое c похмелье или я что-то упустил?