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 数字的总和超出范围时,是否有更好的方法来添加它们?
吉里什·K·古普塔,
\n\nUInt8 的最大范围是 0 到 255。您可以使用UInt8.min和检查UInt8.max检查。基本上是0到2的8次方。
print(number1 + number3) 的问题将返回 300。300 大于 255,因此崩溃。
\n\n当您添加两个 UInt8 结果将默认转换为 UInt8 因此崩溃
\n\n最后当你Int(number1) + Int(number3)强制将 number1 和 number3 转换为 Int 时。
当您使用 Int 时,其值的范围取决于您运行它的平台(32 位或 64 位)。例如,对于 32 位,其范围可以是 -2,147,483,648 到 2,147,483,647。
\n\n当您将 Int 添加到 Int 时,结果将被类型转换为 Int。相信我,300 已经在范围之内了:)
\n\n根据你的问题有没有更好的方法来做到这一点:)
\n\nApple 的文档明确指定并指示使用 Int,而不是 UInt8 或 UInt32 甚至 UInt64,除非使用 UInt8、UInt32 或 UInt64 是绝对必要的。
\n\n这是苹果文档的引用:)
\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
所以你最好做的事情:)按照苹果的说明:)将number1、number2和number3更改为Int:)问题解决了:)
\n\n因此没有崩溃:)
\n| 归档时间: |
|
| 查看次数: |
1775 次 |
| 最近记录: |