2014-11-05 2 views
-1

Я столкнулся с ошибкой кодирования моего проекта flappy bird в Xcode 6.1.Ошибка кодирования Flappy Bird в Swift

Код для обеспечения вращения птицы, и она гласит:

bird.zRotation = self.acotarMinMax(-1, max: 0.3, valor: bird.physicsBody?.velocity.dy * (bird.physicsBody?.velocity.dy < 0 ? 0.003 : 0.001)) 

ошибка возникает при dy, гласит:

value of optional type 'CGFloat?' not unwrapped; did you mean to use '!' or '?'? 

Как я могу исправить ошибку, или есть еще один способ генерации вращения?

Я полный новичок Swift, поэтому мне сложно понять, является ли это проблемой синтаксиса или что-то делать с обновленной версией.

Я получил код из онлайн-учебника, и он работал в видео.

ответ

0

Читайте на классе Swift Optional: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

Так что, кажется, что dy необязательное значение, что означает, что он либо имеет значение или нет, но вы не знаете, пока вы смотрите в он (как Шредин Шредингер). Поэтому, если вам нужно это значение, и вы знаете, что это не будет nil, вы разворачиваете его, записывая bird.physicsBody?.velocity.dy!, который будет смотреть в поле и извлекать значение, но сбой, если внутри ничего нет. Если вы напишете dy?, он будет смотреть в поле, но игнорировать его, если поле пусто.

Подробнее о Факультативным Chaining (что вы делаете) здесь: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html

+0

Привет, Себастьян, спасибо за ответ! – Harry

+0

Не стесняйтесь проголосовать или отметить как правильный ответ, если это вам помогло. :-) –

0

Так что я просто понял свою ошибку.

Как правильно указал Себастьян, это связано с дополнительной цепью.

Код, который работал в:

bird.zRotation = self.acotarMinMax(-1, max: 1, valor: bird.physicsBody!.velocity.dy * (bird.physicsBody!.velocity.dy < 0 ? 0.002 : 0.002)) 

Я '!' чтобы заставить значение для физики. Точный механизм того, почему это работает, по-прежнему является размытым для меня. Но я предполагаю, что это касается метода коррекции новой версии.

Смежные вопросы