2016-10-19 13 views
0

介しオプションブール値を設定することができない私は遊び場から、次のコードを持っている:スウィフト3:反射

class Result :NSObject { 
    var success :Bool? = false 
    var message :String? = "" 
} 

var result = Result() 
print(result.message) 
var value :Bool? = true 
result.setValue(value, forKey: "success") 
result.setValue("hello", forKey: "message") 
print(result.message) 

このコードは、「このクラスは、キー値ではなく、メッセージを最初result.setValue行に失敗coding-キーの成功に対応しています。プロパティの成功を非オプションにすると、このコードは正常に動作します。プロパティメッセージは、オプションであるかどうかにかかわらず正常に動作します。

ここでは何が起こっていますか?その周りには道がありますか?

答えて

1

Swiftには反映されません。あなたはObjective-Cリフレクションを使用しています。 Objective-Cでは、オプションの値の型(BOOLIntなど)はサポートされていません。

+0

周囲の道案内がありますか?たとえば、NSNumberを使用する必要がありますか。 –

+1

'NSObject'の' setValue'を残しておくと、少なくとも値のイントロスペクションのために、Swiftに_is_ reflectionがあります。 'ミラー(反映:結果).children.forEach {print($ 0)}'。 – dfri

+0

@IanNewson「NSNumber」は確かに有効な解決策です。 – Sulthan