使用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? 操作员让您分配和安全地投在一条线上。 由于你的方法没有返回一个可选的,所以如果这个强制转换失败,你必须返回一个有效值。