Xcode 为什么代码打印可选值?

Xcode 为什么代码打印可选值?,xcode,swift,optional,Xcode,Swift,Optional,上面的代码打印出来: 可选(7) 为什么它会这样做,即使我没有使用可选的。字符串已转换为数字,因此输出不应为: 七, ? 由于类型转换不起作用,此代码将输出nil,但我看不出7怎么可能是可选的。当您转换值(即字符串到Int)时,它将是可选的-如果您尝试运行: myString = "banana" possibleInt = Int(myString) print(possibleInt) 这不可能是一个数字,因此它返回一个“空”可选值 如果知道字符串始终是有效数字,则可以不安全地将其展开:

上面的代码打印出来:

可选(7)

为什么它会这样做,即使我没有使用可选的。字符串已转换为数字,因此输出不应为:

七,

?

由于类型转换不起作用,此代码将输出nil,但我看不出7怎么可能是可选的。

当您转换值(即字符串到Int)时,它将是可选的-如果您尝试运行:

myString = "banana"
possibleInt = Int(myString)
print(possibleInt)
这不可能是一个数字,因此它返回一个“空”可选值

如果知道字符串始终是有效数字,则可以不安全地将其展开:

let num = Int("things")
// num is Optional(nil)
或者,如果您不知道该字符串是否为有效整数,则可以安全地将其展开:

let num = Int("5")!
// num is 5, not Optional(5)
方法返回一个可选值,因为如果字符串包含非数字的内容,例如“abc123”,Int(“abc123”)将返回nil,
而且,返回可选值的方法与该方法的参数没有任何关系

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

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

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

if let num = Int(myString) {
     // Do something with the number
} else {
    // Catch some error
}
当然,如果myString不是整数,你的应用程序就会崩溃。但是,您可以通过执行以下操作安全地将其打开

var possibleInt = Int(myString)!

希望这有帮助。

您可以看到,您没有向任何类型声明“myString”,首先声明为string/integer,然后尝试打印该变量。你会得到你想要的确切结果

var myString=“7”

可能变量:Int

var possibleInt=Int(myString)


print(possibleInt)

如果可以为零,则必须是可选的。@matt为什么可以为零?正如您自己所说。它可能会失败,因为字符串不是数字。
Int(string:)
构造函数只能返回1种类型。如果转换成功,它不能决定返回一个常规的
Int
,如果转换不成功,则返回一个
nil
。不能同时返回
nil
Int
。如果要返回
nil
,则必须返回
Int?
,这就是
Int(字符串:)
返回的内容。函数的返回类型在编译时确定,但要转换的值可以在运行时确定。如果不希望它是可选的,则必须提供默认值。你可以用??零凝聚算子。设num=Int(“字符串”)??0如果您执行
let num=Int(“Hello”)则应用程序将在运行时崩溃。最好添加一些可选绑定,而不是显式展开。
var possibleInt = Int(myString)!
if let possibleInt = Int(myString) {
    // use possibleInt as an int and not an optional
}
// otherwise, the program won't do anything with possibleInt