web-dev-qa-db-ja.com

NSDictionaryを辞書に変換するにはどうすればよいですか?

XCode 8に更新済みで、コードをSwift 2からSwift 3.に変換する必要があります。

以前、NSDictionaryDictionaryに変換したいときは、次のように書きました。

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

ここで、post_paramsNSDictionaryです。

しかし今Swift 3で、私はこのエラーを受け取ります:

NSDictionary is not convertible to Dictionary

どうして?何が変わったの?


編集1

私は次のことも試しました:

let post_paramsValue = post_params as Dictionary<String,Any>

しかし、それはこのエラーを与えます:

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


編集2

私は次のことも試しました:

let post_paramsValue =  post_params as Dictionary<String,Any>

NSDictionary!ではなくNSDictionaryを宣言していますが、機能しません。私はこのエラーを受け取りました:

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


編集3

私は次のことも試しました:

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

しかし、私はこのエラーを受け取りました:

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

9
david
  • Objective-CのNSDictionaryには、常に非オプションの値があります。
  • AnyObjectAnyになりましたSwift 3。
  • 最初の2つの「ルール」を考慮して、NSDictionaryDictionaryにブリッジキャストできます。

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の実際のタイプに応じて

13
vadian

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

あなたはちょうどobjcでNSDictionaryを宣言する必要があります

例:NSDictionary<NSString *, NSString*>は、Swiftインターフェースで[String: String]に自動的に変換されます

1
Exception