【发布时间】:2016-05-10 09:51:56
【问题描述】:
我的项目同时使用 Swift 和 Objective C。我有一个用 Objective C 编写的单例,它是 NSDictionary 类型的属性。
@property(nonatomic, strong) NSDictionary *currentDictionary;
这是一个在我的整个项目中使用的旧类。我正在尝试在这样的 Swift 类中使用这个类
if let dict = DataManager.sharedManager().currentDictionary
{
//
}
我面临的问题是 currentDictionary 正在使用来自服务器的数据进行设置。有时这可能是
在 Objective C 类中,我可以通过以下检查来处理这种情况
if ([currentDictionary isKindOfClass: [NSNull class]])
{
// Do nothing
}
但我不确定如何在 Swift 中实现类似的检查。我尝试了以下
if let data = DataManager.sharedManager().currentDictionary as? NSNull
{
return
}
但它不起作用,而且我收到编译器警告:
“从“[NSObject : AnyObject]!”转换为不相关类型“NSNull”总是失败”
这与检查字典中的 Null 值不同,因为它们将是“AnyObject”,我可以尝试将它们转换为我想要检查的类型。
有人可以提供有关如何正确处理这种情况的任何指示
【问题讨论】:
-
NSDictionary应该永远是NSNull类型。它的内容可能是,但不是字典本身。 -
这篇文章可能对你有用stackoverflow.com/questions/24026609/…
-
@luk2302 .. 是的,不应该。我已经与服务器端进行了相同的沟通。但我也想在客户端添加安全检查。
-
正如@luk2302 所说:如果有问题,你应该有nil,但是NEVER EVER NSNull.
-
没有什么可以交流的。它不得是
NSNull。指定类型是有原因的!您的 only 选项是解析您从服务器收到的响应并确定它是否是实际内容 -> 将其放入字典 或 如果它是 @ 987654329@、nil或任何您创建空字典或将字典设置为nil的内容,您不要将字典本身设置为NSNull。与您不将其设置为字面意义上的@"no value present"或@(-2)的方式相同。
标签: objective-c swift type-safety