斯威夫特的这部分似乎真是个噩梦......
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
和许多其他组合都显得毫无结果......任何指针都会非常感激。
答案 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)")
}