编辑保存为用户默认值的数组 SWIFT
Editing an Array Saved to User Defaults SWIFT
我一直在尝试从保存到用户默认值的数组中读取数据,但对象类型导致冲突。
if NSUserDefaults.standardUserDefaults().valueForKey("data")==nil{
let arrya : Array = ["Apple", "Apricot", "Banana", "Blueberry", "Cantaloupe", "Cherry",
"Clementine", "Coconut", "Cranberry", "Fig", "Grape", "Grapefruit",
"Kiwi fruit", "Lemon", "Lime", "Lychee", "Mandarine", "Mango",
"Melon", "Nectarine", "Olive", "Orange", "Papaya", "Peach",
"Pear", "Pineapple", "Raspberry", "Strawberry"]
NSUserDefaults.standardUserDefaults().setObject(arrya, forKey: "data")
}
var data = NSUserDefaults.standardUserDefaults().objectForKey("data")
我正在使用 objectForKey 而不是 valueForKey 因为 this 问题的答案。
这个问题可以回答我的问题,但是...好吧...它没有。我还有问题。例如:
正在尝试
data.count
returns 一个错误:
Value of type 'AnyObject?' not unwrapped; did you mean to use '!' or '?'?
正在尝试:
cell.textLabel?.text = data[0]
returns一个错误:
Could not find an overload for 'subscript' that accepts supplied arguments
为什么类型不兼容?我希望我从 User Defaults 中检索到的是与此相同的类型:
["hola", "alo", "ya", "shalom", bounjour", 1, 3, "ai"]
非常感谢您的提前回复。欢迎大家,非常感谢!
转换为数组
var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! Array<String>
最好使用 if let 检查转换是否失败
从 objectForKey(_:)
编辑的值 return 是 AnyObject?
(因为 NSUserDefaults
可以存储任何类型的对象),但是您正在尝试处理 return 值类似于 Array
。它很可能是一个数组,但编译器不知道,所以你需要告诉它。
如果您确定 returned 值将是一个字符串数组,您可以在初始化 data
变量时强制区分大小写:
var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! [String]
编译器现在知道 data
是 [String]
类型,并在其上使用下标和类似 count
的属性。
我一直在尝试从保存到用户默认值的数组中读取数据,但对象类型导致冲突。
if NSUserDefaults.standardUserDefaults().valueForKey("data")==nil{
let arrya : Array = ["Apple", "Apricot", "Banana", "Blueberry", "Cantaloupe", "Cherry",
"Clementine", "Coconut", "Cranberry", "Fig", "Grape", "Grapefruit",
"Kiwi fruit", "Lemon", "Lime", "Lychee", "Mandarine", "Mango",
"Melon", "Nectarine", "Olive", "Orange", "Papaya", "Peach",
"Pear", "Pineapple", "Raspberry", "Strawberry"]
NSUserDefaults.standardUserDefaults().setObject(arrya, forKey: "data")
}
var data = NSUserDefaults.standardUserDefaults().objectForKey("data")
我正在使用 objectForKey 而不是 valueForKey 因为 this 问题的答案。
这个问题可以回答我的问题,但是...好吧...它没有。我还有问题。例如:
正在尝试
data.count
returns 一个错误:
Value of type 'AnyObject?' not unwrapped; did you mean to use '!' or '?'?
正在尝试:
cell.textLabel?.text = data[0]
returns一个错误:
Could not find an overload for 'subscript' that accepts supplied arguments
为什么类型不兼容?我希望我从 User Defaults 中检索到的是与此相同的类型:
["hola", "alo", "ya", "shalom", bounjour", 1, 3, "ai"]
非常感谢您的提前回复。欢迎大家,非常感谢!
转换为数组
var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! Array<String>
最好使用 if let 检查转换是否失败
从 objectForKey(_:)
编辑的值 return 是 AnyObject?
(因为 NSUserDefaults
可以存储任何类型的对象),但是您正在尝试处理 return 值类似于 Array
。它很可能是一个数组,但编译器不知道,所以你需要告诉它。
如果您确定 returned 值将是一个字符串数组,您可以在初始化 data
变量时强制区分大小写:
var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! [String]
编译器现在知道 data
是 [String]
类型,并在其上使用下标和类似 count
的属性。