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