Swift 中可选的解包时的附加字符
Additional characters when unwrapping optional in Swift
我对 Swift 非常陌生,我正在尝试构建一个简单的计算器来试水。
我有一个名为 'display' 的 UILabel,我想将其值作为 int 存储在名为 'numA' 的变量中。但是,当我这样做时,变量 numA 的值为 nil。
我发现了为什么会这样,因为当我简单地在控制台打印显示文本时:
println("\(display.text!)")
我明白了:“6”而不是“6”。请注意附加在开头的 space。这就是我不能这样做的原因:
var numA = display.text!.toInt()
我做错了什么?
谢谢
前导 space 可能在那里,因为您正在将 display
初始化为 " "
(单个 space)而不是 ""
(空细绳)。即使您的 display.text
中有 space,您也可以在调用 toInt()
.
之前将它们 trim 取出
请注意,由于 toInt()
returns 是可选的,您应该使用 可选绑定 来解包它以防止应用程序崩溃。我推荐:
if let numA = display.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).toInt() {
// use numA
}
请注意在 text
之后使用 ?
而不是 !
。如果 display.text
为 nil
,这将防止您的应用程序崩溃。这是一个 可选链 的例子;如果 display.text
是 nil
,整个链将是 nil
.
这可以通过省略 NSCharacterSet
来进一步简化,Swift 可以从调用中推断出:
if let numA = display.text?.stringByTrimmingCharactersInSet(.whitespaceCharacterSet()).toInt() {
// use numA
}
我对 Swift 非常陌生,我正在尝试构建一个简单的计算器来试水。 我有一个名为 'display' 的 UILabel,我想将其值作为 int 存储在名为 'numA' 的变量中。但是,当我这样做时,变量 numA 的值为 nil。
我发现了为什么会这样,因为当我简单地在控制台打印显示文本时:
println("\(display.text!)")
我明白了:“6”而不是“6”。请注意附加在开头的 space。这就是我不能这样做的原因:
var numA = display.text!.toInt()
我做错了什么?
谢谢
前导 space 可能在那里,因为您正在将 display
初始化为 " "
(单个 space)而不是 ""
(空细绳)。即使您的 display.text
中有 space,您也可以在调用 toInt()
.
请注意,由于 toInt()
returns 是可选的,您应该使用 可选绑定 来解包它以防止应用程序崩溃。我推荐:
if let numA = display.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).toInt() {
// use numA
}
请注意在 text
之后使用 ?
而不是 !
。如果 display.text
为 nil
,这将防止您的应用程序崩溃。这是一个 可选链 的例子;如果 display.text
是 nil
,整个链将是 nil
.
这可以通过省略 NSCharacterSet
来进一步简化,Swift 可以从调用中推断出:
if let numA = display.text?.stringByTrimmingCharactersInSet(.whitespaceCharacterSet()).toInt() {
// use numA
}