Ошибка кодирования Flappy Bird в Swift

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

Код должен позволять вращение птицы, и это читает:

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, поэтому мне трудно понять, является ли это синтаксической проблемой или чем-то, что связано с обновленной версией.

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам