为什么代码会打印一个可选值?

时间:2015-09-27 00:15:10

标签: xcode swift optional

var myString = "7"
var possibleInt = Int(myString)
print(possibleInt)

上面的代码打印出来:

  

可选(7)

为什么即使我没有使用可选项也会这样做。字符串被转换为数字,所以不应该是:

  

7

myString = "banana"
possibleInt = Int(myString)
print(possibleInt)

此代码将打印出nil,因为类型转换不起作用,但我不知道7如何可选。

4 个答案:

答案 0 :(得分:2)

当您将值(即String转换为Int)转换为可选时 - 如果您尝试运行:

let num = Int("things")
// num is Optional(nil)

这不可能是一个数字,所以它返回一个空的'可选的。

如果您知道该字符串将始终是有效数字,您可以不安全地打开它:

let num = Int("5")!
// num is 5, not Optional(5)

或者,如果您不知道该字符串是否为有效的int,您可以安全地打开它:

if let num = Int(myString) {
     // Do something with the number
} else {
    // Catch some error
}

答案 1 :(得分:1)

关于可选项的美妙之处在于它们在您的代码中创建了一个安全网。如果您使用另一种语言并尝试将“example123”解析为Int,它将崩溃并且程序将终止。但是在Swift中,大多数可能导致崩溃的函数返回一个可选项,以便程序继续运行。

有两种方法可以避免在程序结束时获得可选值。

如果您完全确定Int()中的输入是整数,则可以使用

var possibleInt = Int(myString)!

当然,如果myString不是整数,您的应用程序将崩溃。但是,你可以通过

安全地解开它
if let possibleInt = Int(myString) {
    // use possibleInt as an int and not an optional
}
// otherwise, the program won't do anything with possibleInt

希望这有帮助。

答案 2 :(得分:0)

Int()方法返回一个可选值,因为如果你的字符串包含的东西不是数字,例如“abc123”,则Int(“abc123”)将返回nil, 并且,返回可选值的方法与方法的参数没有任何关系。

答案 3 :(得分:0)

您可以看到您没有对任何类型声明“ myString”,首先声明为字符串/整数,然后尝试打印该变量。您将获得所需的确切结果。

var myString =“ 7”

variableInt:Int;

variableInt = Int(myString)

print(possibleInt)