我试图通过arrayname.count
遍历一个(正如我所解释的)数组,如:
if var storedToDoItems: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") {
toDoItems = []
for var i = 0; storedToDoItems.count; i++ {
toDoItems.append(storedToDoItems[i] as NSString)
}
}
并在storedToDoItems.count
标记的标题中收到错误。我首先填充storedToDoItems
,如下所示:
...
toDoItems.append(tb_toDoItem.text)
let fixedToDoItems = toDoItems
// Store items
NSUserDefaults.standardUserDefaults().setObject(fixedToDoItems, forKey: "toDoItems")
// Save the stored stuff
NSUserDefaults.standardUserDefaults().synchronize()
...
答案 0 :(得分:1)
如果将数组存储到用户默认值,则应在提取时尝试将其强制转换为数组。
如果将toDoItems
定义为字符串数组[String]
,那么您只需使用可选绑定与可选的强制转换相结合,只需将提取的数组复制到toDoItems
:
if let storedToDoItems: [String] = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {
toDoItems = storedToDoItems
}
作为数组结构,即值类型,它是通过副本分配的,因此在将storedToDoItems
分配给toDoItems
时,会创建并分配它的副本 - 所以你不要需要单独手动添加每个元素。
您的代码有2个错误:
storedToDoItems
定义为可选AnyObject
,而且选项不具有count
属性。AnyObject
也没有count
属性。与变量中存储的实际类型是一个数组无关,该变量被声明为AnyObject
,这就是编译器如何处理。答案 1 :(得分:0)
你需要告诉我们里面的内容:
toDoItems = [String]()
if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {
for item in storedToDoItems {
toDoItems.append(item)
}
}
甚至更短:
toDoItems = [String]()
if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {
toDoItems = storedToDoItems
}
答案 2 :(得分:0)
我刚用这条Bold系列对您有用
如果var toDoStored:[String] = NSUserDefaults.standardUserDefaults()。objectForKey(" toDoSaved")为? [字符串] {强>
tblItems = []
for var i = 0; i < toDoStored.count ; ++i {
tblItems.append(toDoStored[i] as NSString)
}
}