You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中Int转Double:为何构造器转换成功而as?类型转换失败?

为什么Swift中两种Int转Double的方式结果不同?

咱们先看你给出的代码片段:

var myVariable = 2
var myDoubleTest1 = Double(myVariable)
var myDoubleTest2 = myVariable as? Double
print(myDoubleTest1) // 2.0
print(myDoubleTest2) // nil

这两种写法看起来都是把Int转成Double,但本质完全是两回事:

  • 第一种Double(myVariable):数值转换
    这是调用了Double类型的初始化器,Swift为数值类型(比如Int、Float、Double)提供了专门的初始化方法,用来在不同数值类型之间做值的转换。因为Int的所有可能值都能被Double精确表示,所以这个初始化一定会成功,返回的是一个非可选的Double值,也就是你看到的2.0。

  • 第二种myVariable as? Double:类型转换(Casting)
    这里的as?是Swift里的类型转型操作符,它的作用是检查某个实例是否属于某个特定的类型(或者该类型的子类),但Int和Double是完全独立的两种值类型,它们之间没有继承关系,也不属于同一个类型族,所以这种转型是完全不成立的。Swift没办法把一个Int实例“变成”Double实例,所以转型失败,返回nil。

简单总结:前者是值的转换,通过初始化器生成了一个新的Double值;后者是类型的检查/转换,因为两种类型完全不兼容,所以失败返回nil。

内容的提问来源于stack exchange,提问作者Martin Muldoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:23:18