从任何假定为Int或Double的对象强制转换为double

时间:2018-08-19 18:40:27

标签: swift

我的字典[String: Any]中有一个对象,可以是Int或Double。在我的模型中,我有一个Double变量,我需要执行强制转换。现在我在做以下事情:

if let price = dict["price"] as? Double { self.price = price }
if let price = dict["price"] as? Int { self.price = Double(price) }

有什么办法可以让我的代码在短期内变得更加干净?

2 个答案:

答案 0 :(得分:2)

您可以使用case let来表明只有一件事要投射:

switch dict["price"] {
    case let price as Double: { self.price = price }
    case let price as Int:    { self.price = Double(price) }
    default: break
}

尽管代码稍长,但重复性较低,因为dict["price"]仅使用一次。

如果您确定"price"键将在那里并且将是一个数字,则可以使用以下代码:

self.price = (dict["price"] as! NSNumber).doubleValue

尽管较短,但第二种方法需要程序员提供更多的确定性才能不中断。如果有任何问题,第一个代码将使price保持不变,而第二个代码将崩溃。

答案 1 :(得分:2)

你能尝试

if let price = dict["price"] as? NSNumber {
  self.price = price.doubleValue
}