Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从NSKeyedUnachiver提供的字典中获取有效类型的数据_Swift_Xcode6 - Fatal编程技术网

Swift 如何从NSKeyedUnachiver提供的字典中获取有效类型的数据

Swift 如何从NSKeyedUnachiver提供的字典中获取有效类型的数据,swift,xcode6,Swift,Xcode6,我想从NSKEYEDUNACHIVER提供的字典中获取数据。有什么解决办法吗? 遵循我的代码 class Test: NSObject { var intData: Int var stringData: String . . . func updateData() { NSKeyedArchiver.archiveRootObject([ "intData": self.intData,

我想从NSKEYEDUNACHIVER提供的字典中获取数据。有什么解决办法吗? 遵循我的代码

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
如果找不到,则为零