2016-11-10 162 views
2

这是我的代码。二元运算符'/'不能应用于两个'UInt32'操作数

var frameCount = INT_MAX 
... 

let totalSize: UInt32 = 4096 
let itemSize: UInt32 = 64 
frameCount = totalSize/itemSize 

我得到“二进制运算符'/'不能应用于两个'UInt32'操作数”错误消息。 这真的不可能吗?我错过了什么?

+3

'frameCount'不是'UInt32';) – Hamish

+3

为什么预先设置变量?只需'让frameCount = totalSize/itemSize',编译器就可以实现它。 –

+1

@johnelemans:这是不正确的。 Swift可以进行整数除法(并且结果被截断为一个整数,就像C中的许多其他语言一样)。 –

回答

3

该错误消息有点令人误解。 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) 
相关问题