Бинарный оператор › ошибка

Я работаю над игрой, в симуляторе все работает отлично. Но когда я пытаюсь заархивировать проект, я получаю ошибку в строке:

  if !shouldDetectScoreCollision && ballClearHeight.native > basketballHoopHeight {

ошибка: бинарный оператор > нельзя применять к операндам типа cgfloat.native (он же float) и double (для ballClearHeight.native и баскетболХупХайт)

У меня также есть пара констант:

let halfBall = basketball.size.height/2.0
let ballClearHeight = basketball.position.y - halfBall
let basketballHoopHeight = 200.0
for i in 1 ..< throwPoints.count {
        // CGFloat.native is a Double
        dx += throwPoints[i].x - throwPoints[i-1].x
        dy += throwPoints[i].y - throwPoints[i-1].y
    }

Я попытался преобразовать баскетболHoopHeight = Float(200.0), что выдает ошибку: бинарный оператор > нельзя применять к операндам типа cgfloat.native (он же double) и float (для ballClearHeight.native и баскетболХупХайт)

А также попытался преобразовать баскетболХупХеит = CGFloat(200.0), что дает мне ошибку: бинарный оператор > нельзя применять к операндам типа cgfloat.native (он же float) и cgfloat (для ballClearHeight.native и баскетболХупХайт)

Однако, когда я конвертирую let баскетболХоопХейт = Float(200.0), игра работает на симуляторе, но выдает ошибку при попытке заархивировать.

Любые предложения, пожалуйста?


person lukas28277    schedule 24.05.2017    source источник


Ответы (1)


ballClearHeight.native — это значение CGFloat в «родном» типе, а это Double на 64-битных платформах и Float на 32-битных платформах. Поэтому ни

ballClearHeight.native > basketballHoopHeight // rhs is a Double
ballClearHeight.native > Float(basketballHoopHeight) // rhs is a Float

будет компилироваться для всех платформ (как это делается для архивирования).

Поэтому забудьте о свойстве .native и просто сравните значения CGFloat:

let basketballHoopHeight: CGFloat = 200.0

if !shouldDetectScoreCollision && ballClearHeight > basketballHoopHeight { ... }
person Martin R    schedule 24.05.2017