gpt4 book ai didi

swift - 二元运算符 '|' 不能应用于类型 'Int' 和 'UInt8' 的操作数

转载 作者:可可西里 更新时间:2023-11-01 01:06:01 26 4
gpt4 key购买 nike

我希望在 2 个位图上执行简单的 逻辑,但 Swift 认为这是错误的:

let u: UInt8 = 0b1
let i: Int = 0b10
i | u // Binary operator '|' cannot be applied to operands of type 'Int' and 'UInit8'

有什么方法可以符合类型推断并仍然有效吗?

我总能做到i | Int(u)//3 但我认为这不是最优的。

最佳答案

Swift 的基本原则之一是它不会隐式地类型之间的转换。

let u: UInt8 = 0b1
let i: Int = 0b10
i | Int(u)

迫使您考虑必要的转换以及结果应具有的类型,所以 是正确的解决方案(在我看来)。

让我们考虑另一个例子:

let u: UInt8 = 128
let i: Int8 = -128

u|i 应该是什么?两者

u | UInt8(i)
Int8(u) | i

运行时崩溃,因为 u 不在 Int8 的范围内,而 i 不在在 UInt8 的范围内。两者都是

u | UInt8(bitPattern: i)   // result is `UInt8`
Int8(bitPattern: u) | i // result is `Int8`

可以,但是编译器应该如何在两者之间进行选择? 例如,可以将两者都转换为某种更大的类型

Int(u) | Int(i)

但是那个类型有点随意,它怎么能从编译器自动推断出来呢?什么是“更大的类型”Int64 + UInt64 参数?

这就是为什么我认为显式转换是正确的解决方案。

关于swift - 二元运算符 '|' 不能应用于类型 'Int' 和 'UInt8' 的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30122867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com