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

'AnyObject?' does not have a member named 'count'

我正在尝试通过 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()
...

你需要说出里面是什么:

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
}

如果将数组存储为用户默认值,则应在提取时尝试将其转换为数组。

如果toDoItems被定义为一个字符串数组[String],那么你只需要结合使用可选绑定和可选强制转换,并将提取的数组复制到toDoItems

if let storedToDoItems: [String] = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {
    toDoItems = storedToDoItems
}

作为一个结构数组,即值类型,它是通过副本分配的,因此当将 storedToDoItems 分配给 toDoItems 时,会创建并分配它的副本 - 所以你不需要不需要单独手动添加每个元素。

您的代码有 2 个错误:

  • 您已将 storedToDoItems 定义为可选 AnyObject,并且可选没有 count 属性.
  • 即使未定义为可选,AnyObject 也没有 count 属性。存储在变量中的实际类型是一个数组是无关紧要的,变量被声明为 AnyObject 并且这就是编译器的处理方式。

我刚刚使用了粗体字,希望对你有用

if var toDoStored: [String] = NSUserDefaults.standardUserDefaults().objectForKey("toDoSaved") 作为? [字符串]{

         tblItems = []

        for var i = 0; i < toDoStored.count ; ++i  {
         tblItems.append(toDoStored[i] as NSString)
        }

    }