Ответ 1
Вы были близки с использованием Mirror
: вы можете посмотреть displayStyle
свойство (из перечисляемого типа Mirror.DisplayStyle
) Mirror
, отражающее экземпляр ваш тип
struct Foo {}
class Bar {}
let foo = Foo()
let bar = Bar()
if let displayStyle = Mirror(reflecting: foo).displayStyle {
print(displayStyle) // struct
}
if let displayStyle = Mirror(reflecting: bar).displayStyle {
print(displayStyle) // class
}
Просто обратите внимание, что .optional
также является случаем displayStyle
перечисления Mirror
, поэтому обязательно подумайте о конкретных (развернутых) типах:
struct Foo {}
let foo: Foo? = Foo()
if let displayStyle = Mirror(reflecting: foo as Any).displayStyle {
// 'as Any' to suppress warnings ...
print(displayStyle) // optional
}