2016-12-29 3 views
0

Genau wie das Thema sagt, gibt es eine Klasse, ich möchte Werte für die Eigenschaften in Runtime setzen, und ich habe die Werte, die von NSObject KVC mechanism and Reflect mechanism vererbt werden, gesetzt, und ich muss auch Werte für diejenigen, die haben 't geerbt von NSObject, wie dataType ist Int, Double. Wie kann ich es schaffen?Wie setze ich den Wert für den Schlüssel welchen Typ ist der grundlegende Datentyp in Runtime in swift?

+0

Wenn Sie alle Eigenschaften zu reflektieren und versuchen KVC setValue zu verwenden: forKey: und Wert: Funktion, es könnte ein bisschen Schmerz sein, eine generische Methode zu schreiben, das zu tun (wie Sie codieren möchten oder dekodiere JSON zu deiner Klasse). Zu diesem Thema können Sie den ServiceStack.Swift-Quellcode überprüfen, um zu sehen, wie diese großartige Bibliothek funktioniert: https://github.com/ServiceStack/ServiceStack.Swift – bubuxu

Antwort

0

Die Signatur von setValue(value: Any?, forKey: String) dauert Any? anstelle von AnyObject?. Daher ist es nicht notwendig, dass dieser Wert eine NSObject-Unterklasse ist.

class MyClass : NSObject { 
    public var intField : Int = 100; 
    public var doubleField : Double = 10.0; 
} 

let a = MyClass() 
a.setValue(200, forKey: "intField") 
a.setValue(20.0, forKey: "doubleField") 

print(a.intField) // Output: 200\n 
print(a.doubleField) // Output: 20.0\n 
+0

Danke für Ihren anwser, aber ich habe vergessen zu sagen, ob der dataType Optional ist ? Wie man es macht? – Shaw

+0

Sie könnten diese Antwort betrachten: http://StackOverflow.com/a/31353182/1755075 Um von dieser Antwort zu zitieren, "Wenn Sie wirklich benötigen, um ein Optional zu sein, und wenn Sie wirklich KVC verwenden müssen darauf, dann deklariere es als NSNumber ?, nicht Int ?. " – ewcy

+0

Ich weiß, NSNumber zu verwenden, aber ich möchte nicht, ich frage mich nur, ob es eine andere Methode gibt, um das Ziel zu erreichen, danke dir trotzdem. – Shaw

Verwandte Themen