Swift 如何从NSKeyedUnachiver提供的字典中获取有效类型的数据
我想从NSKEYEDUNACHIVER提供的字典中获取数据。有什么解决办法吗? 遵循我的代码Swift 如何从NSKeyedUnachiver提供的字典中获取有效类型的数据,swift,xcode6,Swift,Xcode6,我想从NSKEYEDUNACHIVER提供的字典中获取数据。有什么解决办法吗? 遵循我的代码 class Test: NSObject { var intData: Int var stringData: String . . . func updateData() { NSKeyedArchiver.archiveRootObject([ "intData": self.intData,
class Test: NSObject {
var intData: Int
var stringData: String
.
.
.
func updateData() {
NSKeyedArchiver.archiveRootObject([
"intData": self.intData,
"stringData": self.stringData,
], toFile: _path())
}
func loadData() {
let data = NSKeyedUnarchiver.unarchiveObjectWithFile(_path)
// --> error: I can't get data["intData"] :(
self.intData = data["intData"].hasValue ? data["intData"] : 0
self.stringData = data["stringData"].hasValue ? data["stringData"] : ""
}
}
如果你有什么好主意,我会很高兴的。
unarchiveObjectWithFile
返回AnyObject?
所以你需要打开它
将代码更改为
let data: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithFile(_path)
if let unwrapData: AnyObject = data {
self.intData = unwrapData["intData"] as Int
self.stringData = unwrapData["stringData"] as String
}
注意:将从下标返回的数据强制转换为Int或String
由于
intData
和stringData
不是可选的,所以上述方法应该可以起作用
如果它们是可选的,那么您需要检查它们
self.intData = (unwrapData["intData"] as? Int) != nil ? unwrapData["intData"] as? Int : 0
self.stringData = (unwrapData["stringData"] as? String) != nil ? unwrapData["stringData"] as? String : ""
如果找不到,将放置0或“”
或
self.intData = unwrapData["intData"] as? Int
self.stringData = unwrapData["stringData"] as? String
如果找不到,则为零