2016-04-29 20 views
0

Ich habe eine Meta-Variable NSObject in einem Viewcontroller, ich beabsichtige, in der Lage sein, jede Art von Objekt aus dem übergeordneten Viewcontroller, der es drückt. Ich habe auch eine Typvariable, die bestimmt, wie ich diese NSObject innerhalb des Viewcontrollers typecast und interpretiere.Wie konvertiert man NSDictionary zu NSObject in Swift?

Das Problem ist, wenn ich versuchte, eine NSDictionary in NSObject in der Eltern, Xcode warnt, dass diese Art der Typumwandlung wird immer scheitern.

-Code, die ich versucht habe:

childVc.meta = ["title":"test"] as! NSObject; // warning: cast from '[String:String?]' to unrelated type 'NSObject' always fails. 

let data = ["title":"test"]; 
childVc.meta = data as! NSObject; // warning: cast from '[String:String?]' to unrelated type 'NSObject' always fails. 


let data = ["title":"test"]; 
childVc.meta = data as NSObject; // error: cannot convert value of type '[String:String?]' to type 'NSObject' in coercion. 


let data = ["title":"test"] as! NSObject; // warning: cast from '[String:String?]' to unrelated type 'NSObject' always fails. 
childVc.meta = data; 

Aber das Gegenteil typecasting funktioniert immer:

let unwrappedMeta = self.meta as! NSDictionary; 

Oh btw, ich weiß, dass rasche am Ende nicht Semikolon benötigt. Es ist nur meine Angewohnheit von obj-c und schnelle sieht so aus, als wäre es egal, also lasst uns dieses Semikolon nicht ablenken. :)

+3

ein NSDictionary ist bereits ein NSObject ... haben Sie es nicht versucht Gießen? – Fonix

+2

in jedem Fall, das ist ein schnelles Wörterbuch, kein NSDictionary, [versuchen Sie dies] (http://Stackoverflow.com/a/24173564/1219956) – Fonix

+0

Warum kann ich das nicht reproduzieren? Ich habe eine Warnung bekommen, dass es immer gelingen wird! – Sweeper

Antwort

1

Sie haben einen optionalen Wert im Wörterbuch, scheint nicht NSDictionary zu sein.

// warning: cast from '[String:String?]' 

Versuchen Sie zu werfen es als AnyObject

+0

Ja, das ist, was ich dann auf die harte Tour gelernt habe. Ich dachte, NSObject und AnyObject ist das gleiche. Aber jetzt sehe ich, dass selbst NSArray und Swift Array sich voneinander unterscheiden. Vielen Dank! –

0

Bitte versuchen Sie es wie folgt zu verwenden:

var traitsDic : NSDictionary! = ["title":"test"] 
var traits = traitsDic as Dictionary<String, AnyObject> 
+0

Er verwendet keine Segment-Analyse, und wenn er das wäre, hätte er die Antwort von hier bekommen http://stackoverflow.com/questions/29271230/objc-to-swift-conversion-of-nsdictionary-to-nsobject-anyobject –

+0

@AyathKhan Hallo. Ich weiß nicht, dass das Segmentanalyse genannt wird. Ich habe vorher versucht, ein grundlegendes Tutorial zu finden, konnte aber keine finden. Kannst du eine Empfehlung geben? –

+0

@Mr. Bond ist NSDictionary und Dictionary die gleiche Klasse? –