4

Я уже обновил Xcode к Xcode 8 и теперь мне нужно, чтобы преобразовать свой код от swift2 к быстрой 3.как преобразовать NSDictionary в словарь в Swift 3?

раньше, когда я хочу, чтобы преобразовать NSDictionary в словарь я просто написал следующее:

let post_paramsValue = post_params as? Dictionary<String,AnyObject?> 

где post_params - NSDictionary.

, но теперь с быстрой 3 Я получаю сообщение об ошибке: сильфона

nsdictionary is not convertible to dictionary 

почему? что изменилось?

Благодаря

edit1, также я попробовал следующее: пусть post_paramsValue = post_params как словарь

, но которые показывают эту ошибку: enter image description here

Edit2: также я пробовал следующее:

let post_paramsValue = post_params as Dictionary<String,Any> 

, где я объявляю NSDictionary вместо NSDictionary! но он не работает, я получил эту ошибку: enter image description here

EDIT3 также я пробовал следующее:

let post_paramsValue = post_params as Dictionary<String,Any>! 

, но я получил эту ошибку: enter image description here

+0

попытался это? Http: // StackOverflow.com/questions/31765875/casting-nsdictionary-as-dictionary-swift –

+0

@UmairAfzal спасибо за ваш комментарий, но почему мне нужно пройти через словарь, используя цикл, это не удобно, почему яблоку нужно усложнять работу? – david

+0

Ну, я не знаю, почему, вы пробовали? это работает или нет? –

ответ

8
  • NSDictionary в Objective-C всегда имеет необязательные значения.
  • AnyObject стал Any в Swift 3.
  • Учитывая первые два "правила" NSDictionary может быть мост отлиты в Dictionary

let post_paramsValue = post_params as Dictionary<String,Any> 

Если источник NSDictionary является необязательным вы можете использовать as Dictionary<String,Any>? или as? Dictionary<String,Any> или as! Dictionary<String,Any> или as Dictionary<String,Any>! в зависимости от фактического типа NSDictionary

+0

благодарю вас за ваш ответ, но я пробовал это раньше, и он не работал, я редактировал вопрос – david

+0

. Затем используйте принудительный оператор литья 'as!', поскольку исходный словарь является необязательным. – vadian

+0

еще раз спасибо, почему я не могу использовать это: let post_paramsValue = post_params в качестве словаря ! – david

0

Для тех, кто имеет проблемы с NSDictionary просто расширением

Swift 3,0

extension NSDictionary { 
    var swiftDictionary: Dictionary<String, Any> { 
     var swiftDictionary = Dictionary<String, Any>() 

     for key : Any in self.allKeys { 
      let stringKey = key as! String 
      if let keyValue = self.value(forKey: stringKey){ 
       swiftDictionary[stringKey] = keyValue 
      } 
     } 

     return swiftDictionary 
    } 
}