“AnyObject?没有名为'count'的成员

时间:2015-01-05 20:51:21

标签: swift

我试图通过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()
...

3 个答案:

答案 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)
        }

    }