从Int转换为Double时出错

时间:2018-04-06 12:24:46

标签: swift

我试图理解为什么第一种情况下的投射有效,而第二种情况则失败。这两者有什么区别?

var myVariable = 2

var myDoubleTest1 = Double(myVariable)
var myDoubleTest2 = myVariable as? Double

print(myDoubleTest1)  // 2.0
print(myDoubleTest2)  // nil

2 个答案:

答案 0 :(得分:3)

var myDoubleTest1 = Double(myVariable)

此行只是Double上的初始值设定项。它需要一个int,并初始化一个新的double。文档为here

var myDoubleTest2 = myVariable as? Double

Swift中的as?关键字执行强制转换。这意味着,在英语中,“创建一个名为myDoubleTest2的变量。如果myVariable的类型为Double,则使用它。否则,请将其设为nil。我们知道,来自代码中的第一行(var myVariable = 2), myVariable不是Double(它是Int),因此myDoubleTest2将是nil您可以阅读有关类型转换here的更多信息。

答案 1 :(得分:1)

第一种情况

var myDoubleTest1 = Double(myVariable)

您实际上将Int转换为Double

但在第二个

var myDoubleTest2 = myVariable as? Double

它会检查myVariable是否属于Double类型&如果通过则没有零值,它会将其值分配给myDoubleTest2