验证减去UIn8 Swift

时间:2018-07-26 01:01:49

标签: swift

如何使用if let或某种条件来确定是否可以减去UInt8?例如40-0x32

if let test = 40 - 0x32{
}

1 个答案:

答案 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) { }