我不想'打开'NSNumber - Swift

时间:2015-11-30 21:07:57

标签: swift

斯威夫特的这部分似乎真是个噩梦......

    let priceNumber = dictionary[kSomeKey] as? NSNumber

    cell.titleLabel.text = String(format: "The price is £%li",priceNumber?.longValue)

编译错误:未解开的可选NSNumber的值

现在,请原谅我可能是一个完整的克里汀,但我只想要我的旧Obj-C风格,如果没有,显示0 ......究竟是怎么回事?如果这个字典键是nil,那就把建议的(priceNumber?.longValue)!会崩溃吗?

记录......

    let priceNumber:NSNumber? = dictionary[kSomeKey] as? NSNumber

和许多其他组合都显得毫无结果......任何指针都会非常感激。

3 个答案:

答案 0 :(得分:4)

最近的方法

let priceNumber = dictionary[kSomeKey] as Int? ?? 0
cell.titleLabel.text = "The price is £\(priceNumber)"

nil合并运算符??展开可选项,如果它不是nil

答案 1 :(得分:1)

我会这样试试:

%li期待一个长整数。

在Swift中,nil不等于零,就像Obj-C中的某些情况一样。 Nil 没有

由于%li期望一个长整数,而nil不是字面值可转换的,并且Swift是静态类型的,你必须打开数字并确保它不是零(零不是零)。

这可能不是100%准确的技术解释。但它应该给出粗略的想法。

答案 2 :(得分:1)

你使它变得更加艰难。字典中的值是可选的,因为您可能无法获取特定键的值。为了安全起见,您可以在if中绑定字典中的值以确保实际拥有一个对象,然后使用字符串插值来设置单元格的文本属性。

// This is all so you can test it in a playground
var dictionary = [String : AnyObject]()
let kSomeKey = "price"
dictionary[kSomeKey] = NSNumber(long: 12)

// Bind the value out of the dictionary
if let priceNumber = dictionary[kSomeKey] as? NSNumber {
    // priceNumber is guaranteed to be an instance of NSNumber at this point
    cell.titleLabel.text = "The price is £\(priceNumber)")
}