使用objectForKey Swift NSUserDefaults NSArray
我对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 }()
现在错误已经转移到了返回线。
我认为这里的问题是你试图将nil
转换为非可选types并将其返回。 斯威夫特不允许这样做。 解决这个问题的最好方法是:
@lazy tasks: NSArray = { let defaults = NSUserDefaults.standardUserDefaults() if let array = defaults.arrayForKey("tasks") as? NSArray { return array } return NSArray() }
使用Swift的if let
语句与as?
结合使用as?
操作员让您分配和安全地投在一条线上。 由于你的方法没有返回一个可选的,所以如果这个强制转换失败,你必须返回一个有效值。