如何在 Swift 2 中使用可选绑定
How to use optional binding in Swift 2
我是学习 Swift 的新手,所以我决定还是学习 Swift 2。到目前为止,除了以下代码片段外,一切对我来说都是有意义的。希望有人能为我阐明这一点。
//: Playground - noun: a place where people can play
import UIKit
//Works
let possibleNumber="2"
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
}
else {
print("could not be converted to integer")
}
//Doesn't Work and I'm not sure why
let testTextField = UITextField()
testTextField.text = "2"
let numberString = testTextField.text //I know this is redundant
if let num = Int(numberString) {
print("The number is: \(num)")
}
else {
print("Could not be converted to integer")
}
代码的顶部部分直接来自 Apple 的 Swift 2 电子书,它如何使用可选绑定将字符串转换为 int 对我来说很有意义。第二段代码基本相同,只是字符串来自UITextField 的文本属性。代码的底部给出了以下错误:
游乐场执行失败:/var/folders/nl/5dr8btl543j51jkqypj4252mpcnq11/T/./lldb/843/playground21.swift:18:18:错误:可选类型'String?'的值未展开;你是不是想用'!'要么 '?'?
如果让 num = Int(numberString) {
我用这条线解决了这个问题:
if let num = Int(numberString!) {
我只想知道为什么第二个例子需要!而第一个没有。我确定问题与我从文本字段获取字符串这一事实有关。谢谢!
区别在于第一种情况下possibleNumber
不是可选变量。它肯定是一个字符串。不能为零。
在第二种情况下,textField.text
return 是一个可选字符串,因此 numberString
是一个可选变量。可能是零。
现在...转换 Int("")
return 是一个可选的 int。如果字符串是 "abc" 那么它不能 return 一个数字所以 return 是零。这就是您使用 if let...
语句展开的内容。
但是,在第二种情况下,您的字符串也是可选的,并且 Int() 将不接受可选字符串。所以你强行打开它。这很危险,因为如果字符串为 nil,它可能会使应用程序崩溃。
你可以做的是这个...
if let numberString = textFeidl.text,
number = Int(numberString) {
// use the number
}
这将首先打开文本,如果可用则使用它。获取号码。如果那不是零那么你进入块。
在 Swift 2 中,您也可以在此处使用 guard let
函数。
刚看到你用的是Swift2.
你也可以这样做...
func getNumber() -> Int {
guard let numberString = textField.text,
number = Int(numberString)
else {
return 0
}
return number
}
我是学习 Swift 的新手,所以我决定还是学习 Swift 2。到目前为止,除了以下代码片段外,一切对我来说都是有意义的。希望有人能为我阐明这一点。
//: Playground - noun: a place where people can play
import UIKit
//Works
let possibleNumber="2"
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
}
else {
print("could not be converted to integer")
}
//Doesn't Work and I'm not sure why
let testTextField = UITextField()
testTextField.text = "2"
let numberString = testTextField.text //I know this is redundant
if let num = Int(numberString) {
print("The number is: \(num)")
}
else {
print("Could not be converted to integer")
}
代码的顶部部分直接来自 Apple 的 Swift 2 电子书,它如何使用可选绑定将字符串转换为 int 对我来说很有意义。第二段代码基本相同,只是字符串来自UITextField 的文本属性。代码的底部给出了以下错误:
游乐场执行失败:/var/folders/nl/5dr8btl543j51jkqypj4252mpcnq11/T/./lldb/843/playground21.swift:18:18:错误:可选类型'String?'的值未展开;你是不是想用'!'要么 '?'? 如果让 num = Int(numberString) {
我用这条线解决了这个问题:
if let num = Int(numberString!) {
我只想知道为什么第二个例子需要!而第一个没有。我确定问题与我从文本字段获取字符串这一事实有关。谢谢!
区别在于第一种情况下possibleNumber
不是可选变量。它肯定是一个字符串。不能为零。
在第二种情况下,textField.text
return 是一个可选字符串,因此 numberString
是一个可选变量。可能是零。
现在...转换 Int("")
return 是一个可选的 int。如果字符串是 "abc" 那么它不能 return 一个数字所以 return 是零。这就是您使用 if let...
语句展开的内容。
但是,在第二种情况下,您的字符串也是可选的,并且 Int() 将不接受可选字符串。所以你强行打开它。这很危险,因为如果字符串为 nil,它可能会使应用程序崩溃。
你可以做的是这个...
if let numberString = textFeidl.text,
number = Int(numberString) {
// use the number
}
这将首先打开文本,如果可用则使用它。获取号码。如果那不是零那么你进入块。
在 Swift 2 中,您也可以在此处使用 guard let
函数。
刚看到你用的是Swift2.
你也可以这样做...
func getNumber() -> Int {
guard let numberString = textField.text,
number = Int(numberString)
else {
return 0
}
return number
}