我将NSUserDefault的UserInfo Dictionary指定为NSMutableDictionary。 现在我的dicInfo是可变字典,但它包含的对象是不可变的。 因此,当我试图替换这些值时,它会导致崩溃。 我附上描述崩溃报告的图像。 如果有任何解决方案,如何将可变字典的内部对象转换为可变字典。
答案 0 :(得分:9)
NSDictionary
类符合NSMutableCopying
协议。因此,我们可以在mutableCopy
上调用NSDictionary
方法来获取对象的NSMutableDictionary
副本。
let dicInfo = userSharedDefaults?.objectForKey(UserDefaultKey.kUserBasicInfo) as? NSDictionary
let mutableDictionary = dicInfo?.mutableCopy
在Swift中,我们可能需要将其转换为正确的类型:
let mutableDictionary = dicInfo?.mutableCopy as? NSMutableDictionary
答案 1 :(得分:1)
const emailModule = require('myModuleName');
emailModule.sendMail('some@mail.com', output).then(() => {
//whatever
}).catch(catchErrFn)
答案 2 :(得分:0)
您还可以按如下方式创建Mutable Dictionary: 它将解决崩溃问题。
let dicInfo = NSMutableDictionary.init(dictionary: userSharedDefaults?.objectForKey(UserDefaultKey.kUserBasicInfo) as! NSDictionary)
答案 3 :(得分:0)
在Swift中既不使用NSMutableDictionary
也不使用mutableCopy()
来从UserDefaults
获取可变字典。
通常情况下,我批评其他答案,但NSMutableDictionary
和mutableCopy()
确实是Swift中不恰当的API。
UserDefaults
获取字典,请使用专用方法dictionary(forKey:
。默认字典类型为[String:Any]
要使对象变为可变,只需使用var
关键字
var userbasicInfo : [String:Any]
if let dictionary = UserDefaults.standard.dictionary(forKey: UserDefaultKey.kUserBasicInfo) {
userbasicInfo = dictionary
} else {
userbasicInfo = [String:Any]()
}
userbasicInfo[kPin] = 5678
print(userbasicInfo)
UserDefaults.standard.set(userbasicInfo, forKey:UserDefaultKey.kUserBasicInfo)