Swiftの辞書型とNSMutableDictionaryを相互変換する方法


以下の方法では上手く変換できません。いずれも警告が発生します。

var dic_swift = [String : AnyObject]()
// Cast from '[String : AnyObject]' to unrelated type 'NSMutableDictionary' always fails
var dic_objc = dic_swift as! NSMutableDictionary
// Cast from 'NSMutableDictionary' to unrelated type '[String : AnyObject]' always fails
var dic = dic_objc as! [String : AnyObject]

変換方法

Swift Dictionary → NSMutableDictionary

NSMutableDictionaryのコンストラクタを用いる必要があります。

NSMutableDictionary → Swift Dictionary

NSMutableDictionaryからSwift標準のDictionary型に変換する際には、一度NSDictionaryを経由して変換を行う必要があります。

サンプル

var dic_swift = [String : AnyObject]()
var dic_objc = NSMutableDictionary(dictionary: dic_swift)
var dic = dic_objc as NSDictionary as! [String : AnyObject]

備考

ちなみに[String : AnyObject]() as! NSMutableDictionaryによるキャストを行った後にキャスト後のオブジェクトを操作するとクラッシュします。

var dic = [String:AnyObject]() as! NSMutableDictionary
dic["a"] = 1 /// -[_TtGCSs29_NativeDictionaryStorageOwnerSSPSs9AnyObject__ setObject:forKeyedSubscript:]: unrecognized selector sent to instance 0x7f913b6048c0

広告