2016-05-13 15 views
0

Ich habe mir einen schnellen Code angeschaut, um eine Reflektionsfunktion zu erstellen, die ein Objekt in JSON serialisiert. Das Problem ist, wenn ich die initializer nennen die Reflexion, um es einen verrückten Fehler wirftSwift 2 Reflection Error

struct Address { 
    var street: String 
} 

struct Person { 
    var name: String = "Dre" 
    var age: Int = 33 
    var dutch: Bool = false 
    var address: Address? = Address(street: "Clark Drive") 
} 

// Throws an error on the next line 
let mirror = Mirror(reflecting: Person) 

Wenn ich versuche, den Wert des Spiegels auf das Ergebnis der Spiegel Initialisierung gesetzt bekomme ich folgende Fehler:

  1. Fehlendes Argument label 'reflektiert:' in Call
  2. kann kein Einzelelement-Tupel mit einem Elemente Label erstellen

Irgendeine Idee, was könnte hier schief gehen?

Antwort

1

Sie müssen eine Instanz Person anstelle der Klasse Person übergeben. Z. B:

struct Address { 
    var street: String 
} 

struct Person { 
    var name: String = "Dre" 
    var age: Int = 33 
    var dutch: Bool = false 
    var address: Address? = Address(street: "Clark Drive") 
} 

let person = Person() 
let mirror = Mirror(reflecting: person) 

print(mirror.displayStyle) 
for case let (label?, value) in mirror.children { 
    print(label, value) 
} 

Drucke:

Optional(Struct) 
name Dre 
age 33 
dutch false 
address Optional(Address(street: "Clark Drive")) 
Mirror for Bookmark 
+0

dieses .. Danke gerade jetzt leider zu sehen, die funktionierte. – Dblock247

1

falsch:

func jediGreet(name: String, ability: String) -> (farewell: String, mayTheForceBeWithYou: String) { 
    return ("Good bye, \(name).", " May the \(ability) be with you.") 
} 

let retValue = jediGreet("old friend", "Force") 
println(retValue) 
println(retValue.farewell) 
println(retValue.mayTheForceBeWithYou) 

richtig:

func jediGreet(name: String, ability: String) -> (farewell: String, mayTheForceBeWithYou: String) { 
    return ("Good bye, \(name).", " May the \(ability) be with you.") 
} 

let retValue = jediGreet (name:"old friend",ability: "Force") 
print(retValue) 
print(retValue.farewell) 
print(retValue.mayTheForceBeWithYou) 
+0

Ich habe die Formatierung für Sie korrigiert. Jetzt liegt es an dir zu beschreiben, was du verändert hast und warum –