如何使用if let
或某种条件来确定是否可以减去UInt8
?例如40-0x32
if let test = 40 - 0x32{
}
答案 0 :(得分:0)
没有类似这样的构造可以测试是否可以执行Uint8
减法:
if let test = 40 - 0x32 { }
但是您可以将其转换为可以测试的条件。
您要确保减法不为负,所以您需要检查:
if 40 - 0x32 >= 0 { }
如果一个或两个值都是UInt8
变量,即使这样做也会引起麻烦,因为在您检查安全性之前会先进行减法运算。
相反,您可以将0x32
移动到等式的另一边,方法是在两边都加上0x32
,从而得出:
if 40 >= 0x32 { }
这也很直观,因为如果第一个数字至少等于要减去的数字,则减法不会为负。
替代答案:
使用Int
执行计算,然后使用UInt8
测试结果是否适合UInt8(exactly:)
:
var a: UInt8 = 40
let result = Int(a) - Int(0x32)
if let answer = UInt8(exactly: result) {
print("answer is \(answer)")
} else {
print("result doesn't fit in a UInt8")
}
UInt8(exactly:)
返回一个UInt8?
,如果该值适合UInt8
,则包装该值;如果该值超出允许的值范围,则为nil
UInt8
。
您可以将其写成一行,然后更接近您的原始尝试:
if let test = UInt8(exactly: 40 - 0x32) { }