2016-04-29 2 views
0

У меня есть мета переменная NSObject в viewcontroller, которую я намереваюсь получить, чтобы получить какой-либо объект из родительского контроллера представления, который его подталкивает. У меня также есть переменная типа, которая определит, как я определяю и интерпретирую этот NSObject внутри viewcontroller.Как преобразовать NSDictionary в NSObject в Swift?

Проблема заключается в том, что я попытался нарисовать NSDictionary в NSObject в родительском коде, Xcode предупреждает, что тип приведения типов всегда будет терпеть неудачу.

код, который я пробовал:

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; 

Но напротив типажей всегда работает:

let unwrappedMeta = self.meta as! NSDictionary; 

О кстати, я знаю, что стриж не нужно точкой с запятой в конце. Это просто моя привычка от obj-c, и быстрый взгляд выглядит неважно, поэтому не позволяйте этой точке с запятой отвлекать нас. :)

+3

NSDictionary уже является NSObject ... вы пробовали не отдать его? – Fonix

+2

в любом случае, это быстрый словарь, а не NSDictionary, [попробуйте это] (http://stackoverflow.com/a/24173564/1219956) – Fonix

+0

Почему я не могу воспроизвести это? Я получил предупреждение о том, что это всегда будет успешным! – Sweeper

ответ

1

У вас есть дополнительное значение в словаре, как представляется, не NSDictionary.

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

Попробуйте бросить его как AnyObject

+0

Да, это то, чему я тогда научился с трудом. Я думал, что NSObject и AnyObject одинаковы. Но теперь я вижу, что даже NSArray и Swift Array сами по себе различны. Благодаря! –

0

Пожалуйста, попробуйте использовать так:

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

Он не использует сегментную аналитику, и если бы он был, он мог бы получить ответ отсюда http://stackoverflow.com/questions/29271230/objc-to-swift-conversion-of-nsdictionary-to-nsobject-anyobject –

+0

@AyathKhan Здравствуй. Я не знаю, что это называется сегментной аналитикой. Я пытался найти базовый учебник об этом раньше, но не смог найти. можете ли вы дать некоторые рекомендации по этому поводу? –

+0

@Mr. Бонд - это NSDictionary и словарь того же класса? –