dar*_*ryl 2 nsuserdefaults ios swift
我对Swift很陌生,而且我已经陷入了困境.
我正在尝试从数据中检索数据NSUserDefaults并将其存储在数组中(tasks):
@lazy var tasks: NSArray = {
let def = NSUserDefaults.standardUserDefaults()
let obj: AnyObject? = def.objectForKey("tasks")
return obj as NSArray
}()
Run Code Online (Sandbox Code Playgroud)
我得到的只是一个警告:EXE_BAD_INSTRUCTION第3行.
还要注意我还没有实际设置任何数据,但我的目标是,如果没有数据,我希望数组为空.我将使用数据填充表格视图.
现在使用var而不是常量:
@lazy var tasks: NSArray = {
let def = NSUserDefaults.standardUserDefaults()
var obj: AnyObject? = {
return def.objectForKey("tasks")
}()
return obj as NSArray
}()
Run Code Online (Sandbox Code Playgroud)
错误现在已移至返回行.
小智 6
我认为这里的问题是你试图转换nil为非可选类型并返回它.斯威夫特不允许这样做.解决这个问题的最佳方法如下:
@lazy tasks: NSArray = {
let defaults = NSUserDefaults.standardUserDefaults()
if let array = defaults.arrayForKey("tasks") as? NSArray {
return array
}
return NSArray()
}
Run Code Online (Sandbox Code Playgroud)
使用Swift的if let语法与as?运算符相结合,您可以在一行中分配和安全转换.由于您的方法不返回可选项,因此如果转换失败,则必须返回有效值.
| 归档时间: |
|
| 查看次数: |
6907 次 |
| 最近记录: |