2016-11-10 110 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) 
相關問題