使用objectForKey的Swift NSUserDefaults NSArray

时间:2014-07-06 18:29:29

标签: ios swift nsuserdefaults

我对Swift很陌生,而且我已经陷入困境。

我正在尝试从NSUserDefaults检索数据并将其存储在数组(tasks)中:

@lazy var tasks: NSArray = {
    let def = NSUserDefaults.standardUserDefaults()
    let obj: AnyObject? = def.objectForKey("tasks")
    return obj as NSArray
}()

我得到的只是警告:第3行EXE_BAD_INSTRUCTION

另外要注意我还没有实际设置任何数据,但我的目标是,如果没有数据,我希望数组为空。我将使用数据填充表格视图。

现在使用var而不是常量:

@lazy var tasks: NSArray = {
    let def = NSUserDefaults.standardUserDefaults()
    var obj: AnyObject? = {
        return def.objectForKey("tasks")
    }()
    return obj as NSArray
}()

现在错误已移至返回行。

1 个答案:

答案 0 :(得分:6)

我认为这里的问题是你试图将nil转换为非可选类型并返回它。斯威夫特不允许这样做。解决这个问题的最佳方法如下:

@lazy tasks: NSArray = {
    let defaults = NSUserDefaults.standardUserDefaults()
    if let array = defaults.arrayForKey("tasks") as? NSArray {
        return array
    }
    return NSArray()
}

使用Swift的if let语法与as?运算符相结合,您可以在一行中分配和安全转换。由于您的方法不返回可选项,因此如果转换失败,则必须返回有效值。