webentwicklung-frage-antwort-db.com.de

Wie konvertiere ich NSDictionary in Dictionary?

Ich habe bereits ein Update auf XCode 8 durchgeführt und muss jetzt meinen Code von Swift 2 nach Swift 3 konvertieren.

Bevor ich NSDictionary in Dictionary konvertieren wollte, habe ich gerade folgendes geschrieben:

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

wobei post_paramsNSDictionary ist.

Aber jetzt mit Swift 3 erhalte ich diesen Fehler:

NSDictionary is not convertible to Dictionary

Warum? Was hat sich geändert?


Bearbeiten 1

Ich habe auch folgendes ausprobiert:

let post_paramsValue = post_params as Dictionary<String,Any>

Aber das gibt diesen Fehler:

 'NSDictionary!' is not convertible to 'Dictionary<String, Any>'; did you mean to use <code>as!</code> to force downcast?


Bearbeiten 2

Ich habe auch folgendes ausprobiert:

let post_paramsValue =  post_params as Dictionary<String,Any>

Wo ich NSDictionary anstelle von NSDictionary! deklariere, aber es funktioniert nicht; Ich habe diesen Fehler erhalten:

 'NSDictionary' is not convertible to 'Dictionary<String, Any>'; did you mean to use <code>as!</code> to force downcast?


Bearbeiten 3

Ich habe auch folgendes ausprobiert:

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

Aber ich habe diesen Fehler erhalten:

 'NSDictionary!' is not convertible to 'Dictionary<String, Any>!'; did you mean to use <code>as!</code> to force downcast?

7
david
  • NSDictionary in Objective-C hat immer nicht optionale Werte.
  • AnyObject wurde in Swift 3 Any.
  • Unter Berücksichtigung der ersten beiden "Regeln" kann NSDictionary in Dictionary übergegossen werden.

let post_paramsValue = post_params as Dictionary<String,Any>

Wenn die Quelle NSDictionary optional ist, können Sie as Dictionary<String,Any>? oder as? Dictionary<String,Any> oder as! Dictionary<String,Any> oder as Dictionary<String,Any>! verwenden, abhängig vom tatsächlichen Typ der NSDictionary

13
vadian

Für diejenigen, die ein Problem mit NSDictionary haben, verwenden Sie einfach diese Erweiterung:

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
    }
}
1
Dzeremix