在软件开发中,利用编译器错误通常是一个不错的主意。通过检查代码使编译器为你工作是有意义的。在强类型语言中,如果变量只有两个有效值,你会将它定义为布尔类型或为其定义枚举类型。Swift 进一步提供了 Optional
类型。
在我看来,无符号整数也应该遵循同样的规则:如果你知道负值是不可能的,在编程时应该采用可强制执行此规则的方式。我所说的是高级 API;低级 API 中负值通常用作加密的错误信号机制。
然而,苹果建议避免使用无符号整数:
这是一个例子:Swift的仅在需要与平台本地字大小相同的无符号整数类型时使用
UInt
。如果不是这种情况,则首选Int
,即使要存储的值已知为非负数。[...]
Array.count
返回一个Int
。怎么可能有负数个项目?!为什么?
苹果公司表示:
“在整数值上一致使用
Int
有助于代码互操作性,避免了在不同数字类型之间转换,并匹配描述在类型安全和类型推断中的整数类型推断。”但我不赞同!与
UInt
相比,使用Int
不会更多地促进“互操作性”,因为Int
可能解析为Int32
或Int64
(对于32位和64位平台分别)。
如果你关心健壮性,那么在没有逻辑意义的情况下使用有符号整数基本上强制进行额外的检查(值是否为负数?)
我认为在有符号和无符号之间转换只是微不足道的。这难道不仅仅是告诉编译器解析机器码以使用有符号或无符号字节码吗?!
UInt
转变为传递Int
。 - user1040049