iOS Swift 中如何添加两个 UInt8 变量?

Gir*_*pta 2 ios swift-playground swift2

假设有两个变量:

let number1 : UInt8 = 100;
let number2 : UInt8 = 100;
Run Code Online (Sandbox Code Playgroud)

您添加并打印它们

print(number1 + number2)  //This prints 200
Run Code Online (Sandbox Code Playgroud)

现在再定义一个

let number3 : UInt8 = 200;
Run Code Online (Sandbox Code Playgroud)

并尝试立即添加

print(number1 + number3)  // Throws execution was interrupted
Run Code Online (Sandbox Code Playgroud)

我知道 number1 和 number3 的总和将超出 UInt8 的范围,但显式转换也没有帮助,例如以下行也会给出相同的错误:

print(UInt8(number1 + number3)) // Throws execution was interrupted
Run Code Online (Sandbox Code Playgroud)

我发现的方法是执行以下操作:

print(Int(number1) + Int(number3))
Run Code Online (Sandbox Code Playgroud)

当 UInt8 数字的总和超出范围时,是否有更好的方法来添加它们?

San*_*ari 5

吉里什·K·古普塔,

\n\n

UInt8 的最大范围是 0 到 255。您可以使用UInt8.min和检查UInt8.max检查。基本上是0到2的8次方。

\n\n

print(number1 + number3) 的问题将返回 300。300 大于 255,因此崩溃。

\n\n

当您添加两个 UInt8 结果将默认转换为 UInt8 因此崩溃

\n\n

最后当你Int(number1) + Int(number3)强制将 number1 和 number3 转换为 Int 时。

\n\n

当您使用 Int 时,其值的范围取决于您运行它的平台(32 位或 64 位)。例如,对于 32 位,其范围可以是 -2,147,483,648 到 2,147,483,647。

\n\n

当您将 Int 添加到 Int 时,结果将被类型转换为 Int。相信我,300 已经在范围之内了:)

\n\n

根据你的问题有没有更好的方法来做到这一点:)

\n\n

Apple 的文档明确指定并指示使用 Int,而不是 UInt8 或 UInt32 甚至 UInt64,除非使用 UInt8、UInt32 或 UInt64 是绝对必要的。

\n\n

这是苹果文档的引用:)

\n\n
\n

\xe2\x80\x9c仅当您特别需要与平台\xe2\x80\x99s 本机字大小相同的无符号整数类型\n 时才使用UInt。如果不是这种情况,则首选 Int,即使要存储的值已知为非负数。对整数值一致使用 Int\n 有助于代码互操作性,避免不同数字类型之间的转换,并匹配整数类型推断,\xe2\x80\x9d

\n\n

摘自:Apple Inc. \xe2\x80\x9cThe Swift 编程语言 (Swift 2.2)。\xe2\x80\x9d\n iBooks。https://itun.es/in/jEUH0.l

\n
\n\n

所以你最好做的事情:)按照苹果的说明:)将number1、number2和number3更改为Int:)问题解决了:)

\n\n

因此没有崩溃:)

\n