我注意到很多快速的内置函数接受或返回Int
是而不是UInt
s:
以下是一些示例Array
:
mutating func reserveCapacity(minimumCapacity: Int)
var capacity: Int { get }
init(count: Int, repeatedValue: T)
mutating func removeAtIndex(index: Int) -> T
鉴于该语言是全新的,并且假设这种设计选择不是任意的 - 我想知道:为什么 swift 内置函数需要Int
是而不是UInt
s?
一些注释:之所以问这个问题,是因为我自己正在开发一些集合,我想知道我应该使用什么类型来处理类似的事情reserveCapacity
等等我自然期望的是reserveCapacity
采取UInt
反而。
UInt
是错误的常见原因。很容易意外生成 -1 并导致无限循环或类似问题。 (许多 C 和 C++ 程序员都经历了惨痛的教训,你真的应该使用int
除非有需要unsigned
.) 由于 Swift 管理类型转换的方式,这一点更加重要。如果您曾经与NSUInteger
打开“有符号到无符号”警告(这是 Swift 中的错误,而不是像 C 中那样的可选警告),您知道那是多么痛苦。
Swift 编程指南在以下部分解释了它们的具体原理UInt
:
NOTE
仅当您特别需要大小与平台本机字大小相同的无符号整数类型时才使用 UInt。如果不是这种情况,则首选 Int,即使要存储的值已知为非负数。对整数值一致使用 Int 有助于代码互操作性,避免在不同数字类型之间进行转换,并匹配整数类型推断,如类型安全和类型推断中所述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)