NSNumber не является подтипом UInt8

Вопрос:

Я пытаюсь сделать довольно простую математику SKShapeNode, чтобы установить положение узла формы. Это выглядит так:

    for var i = 0; i < 6; i++ {
var pip: Pip = pips[i]

// set position
let x: CGFloat = tray2.frame.size.width - (i + 1) * pip.frame.size.width - (i + 1) * 2
let y: CGFloat = tray2.frame.size.height - pip.frame.size.height - 1
pip.position = CGPointMake(x, y)

tray2.addChild(pip)
}

Однако в строке “let x…” возникает ошибка: “NSNumber не является подтипом UInt8”. Что я здесь делаю неправильно?

Лучший ответ:

Проблема в том, что вы не можете неявно преобразовывать целые числа в float. Например:

(i + 1) * pip.frame.size.width

это недопустимо, потому что i является Int, i + 1 является Int а pip.frame.size.widthCGFloat. Это будет работать на таких языках, как Obj-C, где i буду неявным образом отбрасываться в CGFloat но Swift не имеет неявных отбросов, поэтому мы должны явно CGFloat.

Самое простое решение – сначала преобразовать i в CGFloat:

let floatI = CGFloat(i)

а потом

let x = tray2.frame.size.width - (floatI + 1) * pip.frame.size.width - (floatI + 1) * 2

Ответ №1

Оберните выражение в инициализаторе CGFloat, чтобы обратиться к ошибке компилятора

for var i = 0; i < 6; i++ {
var pip: Pip = pips[i]

// set position
let x: CGFloat = CGFloat(tray2.frame.size.width - (i + 1) * pip.frame.size.width - (i + 1) * 2)
let y: CGFloat = CGFloat(tray2.frame.size.height - pip.frame.size.height - 1)
pip.position = CGPointMake(x, y)

tray2.addChild(pip)
}

Оцените статью
TechArks.Ru
Добавить комментарий