swift - 如何从来自 NSKeyedUnarchiver 的 Dictionary 获取多种类型的数据

标签 swift xcode6

我想从来自 NSKeyedUnarchiver 的字典中获取数据。有什么解决办法吗? 我的代码已被遵循。

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

<小时/>

上面的代码应该可以工作,因为 intDatastringData 不是可选的

如果它们是可选的,那么您需要检查它们

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

如果没有找到则为零

关于swift - 如何从来自 NSKeyedUnarchiver 的 Dictionary 获取多种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26200347/

相关文章:

ios - 使用 UIDocumentPickerViewController 在 Swift 中导入文本

ios - iOS 应用程序需要动态字体吗?

ios - 将字符串操作为 AttributedString 后调整元素 - Swift 4

ios - 如何通过在一个屏幕中导航用户来阻止用户

ios - 错误 : linker command failed with exit code 1 (use -v to see invocation) xcode error?

c++ - 不知所措...无法弄清楚为什么 XCode 6.1 无法编译我的 C++ 程序

ios - Swift 中的警告 : Attempt to present ---- whose view is not in the window hierarchy! 和一个变量未传输

ios - 导入数据后如何重新加载UITableView?

ios - Core Data 无法在 IOS Objective - C 中保存 UITextField 的数据

ios - UIStatusBarStyle 不适用于 Swift