此代码将(在 Swift 1.2 中)在最后一行失败:
import Foundation
let dictionary1 = [String: AnyObject]()
NSUserDefaults.standardUserDefaults().setObject(dictionary1, forKey: "test1")
let dictionary2 = [String: AnyObject?]()
NSUserDefaults.standardUserDefaults().setObject(dictionary2, forKey: "test2")
(setObject
方法将 AnyObject
作为其第一个参数。)
通常,Swift 会在第一行失败,但由于导入 Foundation 时的一些魔法,所有内置类型通常都成为 AnyObject
的实现者(大概是因为它们将被桥接为 NSString
、NSArray
、NSDictionary
等)。我依靠这种行为能够将 Swift 数据传递到 NSUserDefaults
。
我的问题是我想传入一个字典,其中的值可能是 nil
,但出于某种原因,尽管导入了 Foundation,但它不起作用。有没有办法在不在我的 Swift 代码中使用 NS* 类型的情况下解决这个问题?
最佳答案
看起来你不能将可选的字典转换为 NSDictionary。作为解决方法,您可以使用 [String : AnyObject] 并将其设置为 NSNull
NSNull 类定义了一个单例对象,用于表示集合对象中的空值(不允许使用 nil 值)。
关于ios - [String : AnyObject] be an AnyObject, 但 [String : AnyObject? ] 怎么可能不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357467/