如何将NSObject转换为NSDictionary或如何访问NSObject键Swift3

如何将NSObject转换为NSDictionary或如何访问NSObject键Swift3

问题描述:

我对此很感兴趣我希望你能帮助我。如何将NSObject转换为NSDictionary或如何访问NSObject键Swift3

我在一个函数中recibe一个变量,这个变量是一个键值对象,我有下一个代码来设置这个var。

let params = command.arguments[0] as? NSObject 

如果我打印这个变量的结果是:

Optional(<__NSArrayM 0x17024fea0>(
{ 
    coordinate = "xxxxxxx,xxxxx"; 
    identifier = cordstrab; 
    latitude = "xxxxxxxx"; 
    longitude = "xxxxxxx"; 
    note = Trabajo; 
    radius = 5; 
    type = onEntry; 
} 
) 
) 

我希望能够存取权限的数据,我与

let lat = (params?.value(forKey: "latitude") as! String) 

我不想要知道什么是错的,或者我怎样才能得到这个对象的值。

+2

这是一个字典数组。你需要做参数?[0] .value(forKey ...) –

+0

如果我添加[0]抛出NSObject没有下标成员 –

+2

它因为你已经铸造它作为NSObject。 chnage它以command.arguments [0]为? NSArray –

由于对象似乎是一个 字典 阵列将其转换为 字典 阵列和使用关键认购字典

if let params = command.arguments[0] as? [[String:Any]], let dict = params.first { 
    let lat = dict["latitude"] as! String // the output is clearly string 
    let long = dict["longitude"] as! String 
    ... 
} 

在斯威夫特除非编译器告诉不要投对象NSObject您。

+0

我该如何投入字典? :( –

+0

我的代码**没有将对象转换成Swift字典('[String:Any]')。不要在Swift中使用NSArray/NSDictionary,你丢掉强类型信息。 – vadian

+0

好吧,我把你的代码和我调试它,但它跳转if语句 –

你的回复说它是一个字典数组。你需要做的

params?[0].value(forKey...) 

但是你需要在此之前将其强制转换为

chnage它

command.arguments[0] as? NSArray 

由于vadian建议,尽量不要使用的NSArray。使用更像一个快速阵列!