2015-09-30 13 views
6

Jetzt kann ich Variablen eines Objekts unter Verwendung Typ untersuchen. Kann ich Werte für meine Variablen mithilfe der Spiegelung festlegen? Oder vielleicht gibt es einen anderen rein-schnellen Weg?Kann ich Werte für Swift-Objekteigenschaften mithilfe der Spiegelung festlegen?

Zum Beispiel möchte ich ein Objekt (ein Swift struct) von JSON erstellen. Ist es möglich, ohne NSObject zu untergliedern und dafür Objective-C-Funktionen zu verwenden?

Antwort

2

Dies war das Beste, was ich im Moment tun kann. Es fehlt noch immer die Konvertierung des MirrorObject in seinen generischen Typ. FYI das ist SwiftyJSON

func convertToObject<T>(json: JSON, genericObject: T) -> T { 
    let mirroredObject = Mirror(reflecting: genericObject) 

    for (_, var attr) in mirroredObject.children.enumerate() { 
     if let propertyName = attr.label as String! { 
      attr.value = json[propertyName] 
      print(propertyName) 
      print(attr.value) 
     } 
    } 
    // Figure out how to convert back to object type... 
} 
+1

@Randex Es ist die Abbildung heraus, wie man zurück zum Objekttypteil konvertiert, der der schwierige Teil ist. Es sei denn, Sie möchten für jeden Typ, den Sie jemals erstellen, eine benutzerdefinierte Erweiterung vornehmen. In swift 4 gibt es Decodable und Encodable. Diese können dies dynamisch tun. – eonist

0

Dies ist eine alte Frage, aber die Antwort war nicht für mich arbeiten.

Ich musste mein Swift-Objekt in ein NSObject ändern, damit die Dinge funktionieren und dynamische Eigenschaften haben.

In meinem Fall verwende ich den Pod Marshal, um Daten zu deserialisieren.