Быстрая динамическая проверка типов для структур?
Я запутался в динамической проверке типов в Swift.
В частности, у меня есть странный случай, когда я хочу написать (или найти) функцию:
func isInstanceOf(obj: Any, type: Any.Type) -> Bool
В Objective-C этоisKindOfClass
, но это не сработает, потому чтоAny.Type
включает в себя структуры Swift, которые не являются классами (гораздо меньшеNSObject
подклассы).
Я не могу использовать Swiftis
здесь, потому что это требует жестко закодированного типа.
Я не могу использоватьobj.dynamicType == type
потому что это будет игнорировать подклассы.
Свифт книга кажется, предполагает, что эта информация потеряна и не доступна для структур вообще:
У классов есть дополнительные возможности, которых нет у структур:
...
Приведение типов позволяет проверять и интерпретировать тип экземпляра класса во время выполнения.(В главе «Приведение типов» говорится, что «приведение типов в Swift реализовано с помощью операторов is и as», поэтому определение «приведение типов» представляется более широким, чемна других языках.)
Тем не менее, это не может быть правдой, чтоis
/as
не работайте со структурами, так как вы можете поместить строки и целые в[Any]
и вытащить их позже, и использоватьis String
или жеis Int
выяснить, что они были. Глава «Кастинг шрифтов» Свифт-книги делает именно это!
Есть ли что-то такое же мощное, какisKindOfClass
но для каких-либо экземпляров Swift? Эта информация все еще должна существовать во время выполнения, верно?