二元运算符'/'不能应用于两个'UInt32'操作数
问题描述:
这是我的代码。二元运算符'/'不能应用于两个'UInt32'操作数
var frameCount = INT_MAX
...
let totalSize: UInt32 = 4096
let itemSize: UInt32 = 64
frameCount = totalSize/itemSize
我得到“二进制运算符'/'不能应用于两个'UInt32'操作数”错误消息。 这真的不可能吗?我错过了什么?
答
该错误消息有点令人误解。 INT_MAX
被定义为
public var INT_MAX: Int32 { get }
所以用
var frameCount = INT_MAX
frameCount
被定义为Int32
类型的变量。 然而,分区totalSize/itemSize
的结果是UInt32
而Swift不会隐式地转换类型。
您可以通过更改初始定义
var frameCount = UINT32_MAX
或者是更简单的解决这个问题,让编译器推断类型:
let totalSize: UInt32 = 4096
let itemSize: UInt32 = 64
let frameCount = totalSize/itemSize
如果你需要的结果作为符号整数,那么你必须 明确地转换它,例如
let frameCount = Int32(totalSize/itemSize)
'frameCount'不是'UInt32';) – Hamish
为什么预先设置变量?只需'让frameCount = totalSize/itemSize',编译器就可以实现它。 –
@johnelemans:这是不正确的。 Swift可以进行整数除法(并且结果被截断为一个整数,就像C中的许多其他语言一样)。 –