2016-11-10 7 views
2

여기에 제 코드가 있습니다.두 개의 'UInt32'피연산자에 이진 연산자 '/'를 적용 할 수 없습니다.

var frameCount = INT_MAX 
... 

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

"이진 연산자 '/'는 'UInt32'피연산자 2 개에 적용 할 수 없습니다."라는 오류 메시지가 표시됩니다. 정말 불가능하거나 무엇을 놓쳤습니까?

+3

'frameCount'는 ('UInt32'가 아닙니다.) – Hamish

+3

왜 변수를 미리 설정 했습니까? 그냥'let frameCount = totalSize/itemSize'라고하고 컴파일러가 그것을 작동시킵니다. –

+1

@ johnelemans : 그건 정확하지 않습니다. Swift는 정수 나누기를 할 수 있습니다 (결과는 C와 같은 다른 많은 언어 에서처럼 정수로 잘립니다). –

답변

3

오류 메시지가 약간 오도합니다. INT_MAX가 너무

var frameCount = INT_MAX 

frameCountInt32 유형의 변수로서 정의와

public var INT_MAX: Int32 { get } 

로 정의된다. totalSize/itemSize의 결과는 UInt32 이지만 Swift는 형식을 암시 적으로 변환하지 않습니다. 당신이 부호있는 정수로 결과를 다음 필요한 경우

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

:

당신은 아마

var frameCount = UINT32_MAX 

또는 간단한에 초기 정의를 변경하여이 문제를 해결할 수, 컴파일러가 타입을 추론 할 수 명시 적으로 변환해야합니다.

let frameCount = Int32(totalSize/itemSize)