2016-05-13 5 views
0

オブジェクトをJSONにシリアライズするためのリフレクション機能を試してみようと思います。Swift 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) 

をスロー反射を得るために初期化子を呼び出すときに、私は次のエラーを取得することです「反映:」

  1. 欠落引数ラベルの呼び出しで
  2. 要素ラベルで単一要素のタプルを作成することはできません

ここで何がうまくいかないのでしょうか?

答えて

1

Personの代わりにPersonのインスタンスを渡す必要があります。例えば:

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) 
} 

プリント:

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

はちょうど今..働いたおかげでこれを見て。 – Dblock247

1

間違っ:

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) 

正しい:

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

あなたの書式を修正しました。今変更したものと_why_を記述するのはあなた次第です –