Отражение Swift 2.0 XCode 7 бета 5

Apple изменила отражение Swift в XCode 7 beta 5. Глобальная функция Reflect() исчезла, и вам придется сделать это:

let mirror = Mirror(reflecting: object)

Он дает более или менее ту же информацию в более удобной форме (не более .1 или .2 для имени свойства и значения). Но я не могу найти способ выяснить, является ли зеркальный элемент экземпляром класса. В более старой реализации вы можете проверить следующее:

reflectedProperty.1.objectIdentifier != nil || reflectedProperty.1.count > 0

Но objectIdentifier, похоже, исчез, и счетчик всегда равен 2 независимо от типа.

Помочь кому-нибудь?


person Peheje    schedule 19.08.2015    source источник


Ответы (2)


Итак, я нашел обходной путь. Я перебирал mirror.children.enumerate(), который, казалось, делал все свойства типа String. Вместо этого я покопался в предварительной документации Apple и прочитал, что было бы неплохо «обновить» дочерние элементы, например, до AnyRandomAccessCollection. Что позволило полагаться на количество дочерних объектов, чтобы определить, является ли это объектом (после проверки того, является ли он массивом)

В настоящее время у меня есть работающий класс Swift для JSON Serializer, работающий здесь над этой сутью, если вас интересует код: https://gist.github.com/peheje/cc3618253d4f38ea4885

person Peheje    schedule 19.08.2015

Я не уверен, что вы ищете это, но вывод для следующего: "Класс"

mirror.displayStyle
person Dinesh Reddy Parne    schedule 07.03.2016