编辑/更新:在 Swift 3 中,您的字典类型可以。
字典
Swift 还在 Dictionary 类型和 NSDictionary 之间架起了一座桥梁
班级。当您从带有参数化的 NSDictionary 对象桥接时
类型到 Swift 字典,结果字典的类型是 [Key:
价值]。
如果一个 NSDictionary 对象没有指定参数化类型,它是
桥接到 [AnyHashable: Any] 类型的 Swift 字典
因此,在 Swift 3 中将您的字典数组声明为 [[String: Any]] 就可以了:
Xcode 8 • Swift 3
var cart: [[String: Any]] = []
cart.append(["name": "A", "price": 19.99, "qty": 1])
cart.append(["name": "B", "price": 4.99, "qty": 2])
UserDefaults.standard.set(cart, forKey: "myCart")
if let loadedCart = UserDefaults.standard.array(forKey: "myCart") as? [[String: Any]] {
print(loadedCart) // [[price: 19.99, qty: 1, name: A], [price: 4.99, qty: 2, name: B]]"
for item in loadedCart {
print(item["name"] as! String) // A, B
print(item["price"] as! Double) // 19.99, 4.99
print(item["qty"] as! Int) // 1, 2
}
}
您只需要更改声明字典数组的方式。您应该使用[String: AnyObject] 而不是[String: Any]。你应该这样做:
斯威夫特 2.3
var cart: [[String: AnyObject]] = []
cart.append(["name": "A", "price": 19.99, "qty": 1])
cart.append(["name": "B", "price": 4.99, "qty": 2])
NSUserDefaults().setObject(cart, forKey: "myCart")
if let loadedCart = NSUserDefaults().arrayForKey("myCart") as? [[String: AnyObject]] {
print(loadedCart) // [[price: 19.99, qty: 1, name: A], [price: 4.99, qty: 2, name: B]]"
for item in loadedCart {
print(item["name"] as! String) // A, B
print(item["price"] as! Double) // 19.99, 4.99
print(item["qty"] as! Int) // 1, 2
}
}