2016-11-10 7 views
2

Вот мой код.Двоичный оператор '/' не может применяться к двум операндам «UInt32»

var frameCount = INT_MAX 
... 

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

Я получаю «Двоичный оператор '/' не может применяться к двум сообщениям« операнды UInt32 ». Неужели это невозможно или что я пропустил?

+3

'frameCount' не' UInt32';) – Hamish

+3

Почему вы предварительно установить переменную? Просто «let 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)