ios - [String : AnyObject] be an AnyObject, 但 [String : AnyObject? ] 怎么可能不行?

标签 ios objective-c swift

此代码将(在 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 的实现者(大概是因为它们将被桥接为 NSStringNSArrayNSDictionary 等)。我依靠这种行为能够将 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/

相关文章:

iphone - iOS:NSSocketPort,你在哪里?

objective-c - 创建 UIImageView

iphone - 模态 ViewController 消失后,iOS 7 自定义后退按钮消失

ios - 跟踪 Alamofire 请求的进度

ios - 项目在 Xcode 9.0.1 上运行正常,但在 Xcode 9.2 上显示错误

objective-c - 存档中的 Swift 编译器错误

ios - DynamoDB 可以批量删除具有特定分区键的项目吗?

ios - 我如何从 GameCenter 获取玩家排名

ios - Xcode tableview 图像一次又一次加载

objective-c - 在 mac os 上使用 cocoa 获取 private/var/folders 缓存文件夹路径