Как я могу преобразовать NSDictionary в словарь?
Я уже обновился до XCode 8 и теперь мне нужно конвертировать код из Swift 2 в Swift 3.
До того, когда я хочу конвертировать NSDictionary
в Dictionary
Я просто написал следующее:
let post_paramsValue = post_params as? Dictionary<String,AnyObject?>
где post_params
является NSDictionary
,
Но теперь с Swift 3 я получаю эту ошибку:
NSDictionary is not convertible to Dictionary
Зачем? Что изменилось?
Редактировать 1
Я также попробовал следующее:
let post_paramsValue = post_params as Dictionary<String,Any>
Но это дает эту ошибку:
"; Вы имели в виду использовать Где я заявляю let post_paramsValue = post_params as Dictionary<String,Any>
NSDictionary
вместо NSDictionary!
, но это не работает; Я получил эту ошибку:
2 ответа
NSDictionary
в Objective-C всегда есть необязательные значения.AnyObject
сталAny
в Свифте 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
Для тех, у кого проблемы с 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
}
}
Вам просто нужно правильно объявить NSDictionary в objc
Например: NSDictionary<NSString *, NSString*>
автоматически переводится на [String: String]
в быстрых интерфейсах