我有以下代码:
var displayValue: Double{ get{ println("display.text =\(display.text!)") return NSNumberFormatter().numberFromString(display.text!)!.doubleValue } set{ display.text = "\(newValue)" userIsInTheMiddleOfTypingANumber = false; } }
在模拟器中工作正常。但是当我在手机上尝试时,它崩溃了。这是控制台:
digit= 3 display.text =3 operandStack =[3.0] digit= 2 display.text =2 operandStack =[3.0, 2.0] display.text =6.0 fatal error: unexpectedly found nil while unwrapping an Optional value
这行:
NSNumberFormatter()。numberFromString(display.text!)!
返回nil,这导致应用程序崩溃,导致无法打开可选包装。我真的不知道怎么了 我正在关注iTunes U中的一些教程。
任何帮助,将不胜感激。
尝试:
get{ println("display.text =\(display.text!)") let formatter = NSNumberFormatter() formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") return formatter.numberFromString(display.text!)!.doubleValue }
因为NSNumberFormatter默认情况下使用设备区域设置,所以十进制分隔符可能不是"."。例如:
NSNumberFormatter
"."
let formatter = NSNumberFormatter() formatter.locale = NSLocale(localeIdentifier: "ar-SA") print(formatter.decimalSeparator!) // -> outputs "٫" formatter.numberFromString("6.0") // -> nil
使用此类语言环境的格式化程序无法解析字符串,例如"6.0"。因此,如果您希望格式化程序获得一致的结果,则应明确指定locale。
"6.0"
locale
至于en_US_POSIX语言环境,请参阅文档:
en_US_POSIX
在大多数情况下,最佳选择en_US_POSIX的语言环境是,无论用户和系统偏好如何,该语言环境都是专门为产生美国英语结果而设计的。en_US_POSIX也是时间不变的(如果美国在将来的某个时候改变日期格式的方式,en_US将会改变以反映新的行为,但en_US_POSIX不会改变),以及平台之间en_US_POSIX的时间不变(在iPhone OS上与在OS上相同)在OS X和其他平台上一样)。
en_US