我是XCode的新手,我正在学习一个购物清单程序的在线教程。我有这个错误,它出现两次,“类型为‘any’的值没有下标”。如果有人能帮助我或给我指导,我将不胜感激,谢谢!
private func seedItems() {
let ud = UserDefaults.standard
if !ud.bool(forKey: "UserDefaultsSeedItems") {
if let filePath = Bundle.main.path(forResource: "seed", ofType: "plist"), let seedItems = NSArray(contentsOfFile: filePath) {
// Items
var items = [Item]()
// Create List of Items
for seedItem in seedItems {
if let name = seedItem["name"] as? String, let price = seedItem["price"] as? Float { //this is where the error appears
print("\(name) - \(price)")
// Create Item
let item = Item(name: name, price: price)
// Add Item
items.append(item)
}
}
print(items)
if let itemsPath = pathForItems() {
// Write to File
if NSKeyedArchiver.archiveRootObject(items, toFile: itemsPath) {
ud.set(true, forKey: "UserDefaultsSeedItems")
}
}
}
}
}
1条答案
按热度按时间sd2nnvve1#
NSArray
是一个客观C数组。类型系统对NSArray
的内容一无所知,因此它假定它们是类型Any
。解决问题的捷径是将每一项都转换为正确的类型。
然而,我注意到您使用的初始化器已被弃用,因此您应该寻找更好的方法来加载您的属性列表。
事实证明,您可以使用
Decodable
对象来解码属性列表。您应该考虑使用PropertyListDecoder。