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
どうして?何が変わったの?
私は次のことも試しました:
let post_paramsValue = post_params as Dictionary<String,Any>
しかし、それはこのエラーを与えます:
私は次のことも試しました:
let post_paramsValue = post_params as Dictionary<String,Any>
NSDictionary!
ではなくNSDictionary
を宣言していますが、機能しません。私はこのエラーを受け取りました:
私は次のことも試しました:
let post_paramsValue = post_params as Dictionary<String,Any>!
しかし、私はこのエラーを受け取りました:
NSDictionary
には、常に非オプションの値があります。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
の実際のタイプに応じて
NSDictionary
に問題がある場合は、次の拡張機能を使用してください:
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
}
}
あなたはちょうどobjcでNSDictionaryを宣言する必要があります
例:NSDictionary<NSString *, NSString*>
は、Swiftインターフェースで[String: String]
に自動的に変換されます