2014-09-10 23 views
5

Sto tentando di creare un serializzatore che cambierà le proprietà di un oggetto.Utilizzo di Reflection per modificare le proprietà in Swift

Esempio:

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

so di poter accedere i nomi ei tipi delle proprietà utilizzando

reflect(testobjc())[0].1 

e

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

ma quello che vorrei fare è qualcosa di come

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!" 
    } 
} 

In sostanza, voglio scorrere tutte le proprietà elencate per una determinata classe e impostare le proprietà su un oggetto appena creato di quella classe. Qualsiasi guida sarebbe apprezzata. La riflessione rapida è nuova per me.

+0

La funzione di riflessione di Swift sembra consentire solo le proprietà di lettura (almeno fino alla versione beta 7). Questo post: http://stackoverflow.com/questions/24245262/qa-call-a-method-from-a-string-in-swift combinato con un metodo setter potrebbe darti quello che ti serve. –

+0

@EranGloben Buona idea. Funzionerebbe, ma avrei bisogno di essere garantito che ci fosse un metodo setter per ogni proprietà, e dato che non vedo alcun modo di riflettere sui metodi in modo rapido, non posso garantirmi che ... idee su questo fronte? Sento che potrei essere solo sfortunato. – steventnorris

+0

Hai trovato qui una soluzione per questo? –

risposta

Problemi correlati