从json向AnyObject

时间:2016-05-14 14:54:48

标签: json xcode swift guard

我需要在json文件中解析字典中的数据(包含相同的键)。问题是在某些词典中,同一个键的值是一个字符串,但在另一个字典中它是一个浮点数。 (可选读:原因是我使用的csv到json转换器确实将负十进制数识别为字符串,因为在破折号后面有一个空格:" - 4.50"。我将字符串解包后删除该空格并转换为浮动。)

我尝试执行以下操作:

guard let profit = data["profit"] as? AnyObject else { return }
if profit as! Float != nil {
  // Use this value
} else {
  // It is a string, so delete the space and cast to float
}

必须有一个简单的解决方案,但无论我怎么把它?而且!在守卫声明中,编译器会抱怨。

1 个答案:

答案 0 :(得分:1)

无论如何,字典值的默认类型为AnyObject,因此此类型转换是多余的。

您只需使用is操作数

检查类型
guard let profit = data["profit"] else { return }
if profit is Float {
  // Use this value
} else {
  // It is a string, so delete the space and cast to float
}

或者包括正确的类型转换

guard let profit = data["profit"] else { return }
if let profitFloat = profit as? Float {
  // Use this value
} else if let profitString = profit as? String {
  // It is a string, so delete the space and cast to float
}