知识卡片

整数类型间禁止隐式转换

专业/工作 · 740.a

内容

Swift中不同宽度或符号的整数类型(如Int16Int8)之间不能直接运算,必须先显式转换(如Int16(b))才能相加,这与C等语言遇到混合类型运算会自动做隐式转换、可能悄悄丢失精度的做法相反。代价是代码更冗长,换来的是每一次类型转换在代码里都清晰可见、可审查。因此官方建议除非算法或跨语言交换数据明确需要特定宽度,否则统一用Int,能省掉绝大多数场景下的显式转换代码。发散:这是静态类型语言里”显式优于隐式”哲学的又一处体现,与[[整数溢出默认触发陷阱]]同属”默认更严格、宽松行为需显式声明”这条设计主线,用少量书写成本换取代码可读性和正确性上的确定性。

参考来源

《Swift编程权威指南》第4章《数》