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.
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. –
@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
Hai trovato qui una soluzione per questo? –