我试图理解为什么第一种情况下的投射有效,而第二种情况则失败。这两者有什么区别?
var myVariable = 2
var myDoubleTest1 = Double(myVariable)
var myDoubleTest2 = myVariable as? Double
print(myDoubleTest1) // 2.0
print(myDoubleTest2) // nil
答案 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