2017-06-05 89 views
0

我對此很感興趣我希望你能幫助我。如何將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 –

回答

3

由於對象似乎是一個 字典 陣列將其轉換爲 字典 陣列和使用關鍵認購字典

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語句 –

1

你的回覆說它是一個字典數組。你需要做的

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

但是你需要在此之前將其強制轉換爲

chnage它

command.arguments[0] as? NSArray 

由於vadian建議,儘量不要使用的NSArray。使用更像一個快速陣列!