2016-11-10 4 views
2

Hier ist mein Code.Binärer Operator '/' kann nicht auf zwei 'UInt32'-Operanden angewendet werden

var frameCount = INT_MAX 
... 

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

Ich erhalte die Fehlermeldung "Binary Operator '/' kann nicht auf zwei 'UInt32' Operanden angewendet werden". Ist es wirklich unmöglich oder was habe ich vermisst?

+3

'frameCount' ist kein' UInt32';) – Hamish

+3

Warum setzen Sie die Variable? Lass 'einfach frameCount = totalSize/itemSize' und der Compiler erledigt es. –

+1

@johnelemans: Das ist nicht korrekt. Swift kann Integer-Divisionen ausführen (und das Ergebnis wird auf eine ganze Zahl gekürzt, wie in vielen anderen Sprachen wie C). –

Antwort

3

Die Fehlermeldung ist ein bisschen irreführend. INT_MAX als

definiert
public var INT_MAX: Int32 { get } 

so mit

var frameCount = INT_MAX 

frameCount als Variable vom Typ Int32 definiert ist. Das Ergebnis der Division totalSize/itemSize ist ein UInt32 jedoch, und Swift konvertiert Typen nicht implizit.

Sie können das Problem beheben, indem die ursprüngliche Definition Wechsel zu

var frameCount = UINT32_MAX 

oder vielleicht einfacher, lassen Sie den Compiler den Typ ableiten:

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

Wenn Sie das Ergebnis als Ganzzahl mit Vorzeichen müssen dann Sie muss explizit konvertieren, z

Verwandte Themen