2014-09-10 3 views
5

Я пытаюсь создать сериализатор, который изменит свойства объекта.Использование Reflection для изменения свойств в Swift

Пример:

class testobj{ 
    var prop1:Int = 3 
    var prop2:String = "Hello" 
    var prop3:Dictionary<String,String> = Dictionary<String,String>() 
} 

Я знаю, что я могу получить доступ имена и типы свойств с помощью

reflect(testobjc())[0].1 

и

var tester = testobj() 
_std_lib_DemangledTypeName(tester.prop1) 

, но то, что я хотел бы сделать что-то подобные

var tester = testobj() 
for(var x:Int = 0; x < reflect(testobj()).count; x++){ 
    if(_std_lib_DemangledTypeName(tester.(reflect(testobj())[0].1)) == "Swift.String"){ 
     tester.(reflect(testobj())[0].1) = "World!" 
    } 
} 

По сути, я хочу перебрать все свойства, перечисленные для данного класса, и установить свойства для вновь созданного объекта этого класса. Любые рекомендации будут оценены. Быстрое отражение для меня нова.

+0

Функция отражения Swift, по-видимому, только позволяет считывать свойства (по крайней мере, с бета-версии 7). Это сообщение: http://stackoverflow.com/questions/24245262/qa-call-a-method-from-a-string-in-swift в сочетании с методом setter может дать вам то, что вам нужно. –

+0

@EranGloben Хорошая мысль. Это сработает, но мне нужно будет гарантировать, что для каждого свойства есть метод setter, и поскольку я не вижу никакого способа задуматься о быстрых методах, я не могу гарантировать, что .... идеи на этом фронте? Я чувствую, что мне просто не повезло. – steventnorris

+0

Вы нашли здесь решение для этого? –

ответ