我有一个NSDictionary,它是通过API服务器的JSON响应填充的.有时,本词典中键的值为Null

我试图获取给定的值,并将其放入表格单元格的详细文本中进行显示.

问题是,当我试图将值强制为NSString时,会出现崩溃,这是因为我试图将Null强制为字符串.

正确的方法是什么?

我想做的是这样的:

cell.detailTextLabel.text = sensor.objectForKey( "latestValue" ) as NSString

下面是这本字典的一个例子:

Printing description of sensor:
{
    "created_at" = "2012-10-10T22:19:50.501-07:00";
    desc = "<null>";
    id = 2;
    "latest_value" = "<null>";
    name = "AC Vent Temp";
    "sensor_type" = temp;
    slug = "ac-vent-temp";
    "updated_at" = "2013-11-17T15:34:27.495-07:00";
}

如果我只需要把所有这些都打包成一个条件,那很好.我只是还没弄明白那是什么条件.回到Objective-C的世界,我会将其与[NSNull null]进行比较,但这在Swift中似乎不起作用.

推荐答案

您可以使用as?运算符,它返回一个可选值(如果向下播放失败,则返回nil)

if let latestValue = sensor["latestValue"] as? String {
    cell.detailTextLabel.text = latestValue
}

我在一个swift应用程序中测试了这个示例

let x: AnyObject = NSNull()
if let y = x as? String {
    println("I should never be printed: \(y)")
} else {
    println("Yay")
}

它正确地打印了"Yay"

let x: AnyObject = "hello!"
if let y = x as? String {
    println(y)
} else {
    println("I should never be printed")
}

按预期打印"hello!"张.

Swift相关问答推荐

SwiftUI轨迹绘制怪异

我正在try 通过代码设置节中页眉和页脚的高度,但它不起作用

如何在枚举有关联数据时使用combined if with case

正在接收具有不完整数据错误的URL请求

可以';t在标记为@Observable的类上使用属性包装

为什么 Swift URL 的 init?(string: String,relativeTo: URL?) 仅添加协议?

我如何在 swift 中的 viewdidload 之前进行委托?

Swift计时器未触发

如何为等待函数调用添加超时

SwiftUI Preview 不适用于 Core Data

如何删除标签和步进按钮之间的间距是 SwiftUI Stepper?

在 Swift 中返回实例类型

subscribeOn 和 observeOn 的顺序重要吗?

Swift 协议只能设置?

如何轻松删除领域中的所有对象

无法推断泛型参数的参数

修复 Swift 3 中的警告C-style for Statement is deprecated

使用相机进行人脸检测

swift中相同的数据类型多变量声明

保持窗口始终在顶部?