2015-03-23 2 views
2

Инструмент Swift's Fix It жалуется, что требуется восклицательный знак. После вставки одного из них он жалуется, что его нужно удалить. Какое правильное использование «?» а также "!" для этого кода ?!Компилятор ошибок «Fix It» Swift - Опция

var debugLabel : SKLabelNode! 

override func update(currentTime: NSTimeInterval) { 
    debugLabel!.text = "Ang: \(getFormattedNum(ball.physicsBody?.angularVelocity!))" 
} 

func getFormattedNum(num:CGFloat) ->String { 
    var formatter = NSNumberFormatter() 
    formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle 
    return formatter.stringFromNumber(num)! 
} 

override func didMoveToView(view: SKView) { 
    super.didMoveToView(view) 
    debugLabel = childNodeWithName("deBugger") as SKLabelNode 
    ... 
} 

Место Фикс Он переключая назад и вперед, это восклицательный знак в конце этого свойства в FUNC обновление: ball.physicsBody .angularVelocity!

С! или ? ошибка: «Операнд постфикса! должен иметь необязательный тип, тип -« CGFloat ».

Без дополнительного индикатора ошибка« Значение дополнительного типа »CGFloat?» не разворачивается ...

Обратите внимание, что «deBugger» - это имя метки в sks.

+0

мяч является ColorSprite на SKS определяется как: \t вар мяч \t \t \t: SKSpriteNode! – RickW

+0

'angularVelocity' объявляется как' var angularVelocity: CGFloat' согласно документации Apple, поэтому восклицательный знак не нужен. – NobodyNada

+0

Спасибо, но почему Xcode говорит мне, что это так? Я объявляю что-то не так? – RickW

ответ

1

Проблема в том, что у вас есть дополнительная цепочка ball.physicsBody?.angularVelocity. Это результат в необязательном порядке, поскольку это дополнительная цепочка. К сожалению, вы не можете просто развернуть это, добавив ! в конец, потому что ball.physicsBody?.angularVelocity! также является дополнительной цепью (! только разворачивает angularVelocity, а не целую цепочку). Кроме того, в этом случае angularVelocity имеет тип CGFloat, поэтому вы не можете его распаковать. Вам нужно добавить скобки вокруг дополнительной цепи, а затем вы можете разворачивать его:

debugLabel!.text = "Ang: \(getFormattedNum((ball.physicsBody?.angularVelocity)!))" 
+0

Спасибо. Это сработало. – RickW

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