Ошибки Swift 2.0

Я пытаюсь использовать следующий код:

func redrawShape(shape: Shape, completion:() -> ()) {
    for (idx, block) in shape.blocks.enumerate() {
        let sprite = block.sprite!
        let moveTo = pointForColumn(block.column, row: block.row)
        let moveToAction: SKAction = SKAction.moveTo(moveTo, duration: 0.05)
        moveToAction.timingMode = .EaseOut
        sprite.runAction(moveToAction, completion: nil)
}

Я получаю ошибку в этой строке:

sprite.runAction(moveToAction, completion: nil)

Ошибка говорит:

Невозможно вызвать «runAction» со списком аргументов типа «(SKAction, завершение: nil)»

Я не понимаю, как это исправить.


person Gary Simcox    schedule 16.06.2015    source источник


Ответы (2)


Обработчик завершения не является необязательным. Вам нужно что-то передать. Вы можете передать пустое закрытие:

sprite.runAction(moveToAction, completion: {})

Или, как указывает Мэтт, лучше использовать другую форму:

sprite.runAction(moveToAction)

Ответ Мэтта действительно лучший.

person Rob Napier    schedule 16.06.2015
comment
На самом деле это является необязательным - весь параметр является необязательным. - person matt; 16.06.2015
comment
ХОРОШО; это не необязательный необязательный элемент (то есть то, чему вы можете передать nil). Я не видел, чтобы у них была перегрузка для этого, хотя. - person Rob Napier; 16.06.2015
comment
Спасибо! Я очень ценю это! - person Gary Simcox; 16.06.2015

Вы вызываете неправильный метод. Если у вас нет обработчика завершения, не вызывайте runAction(_:completion:). Вызовите простой runAction(_:), например:

 sprite.runAction(moveToAction)

Другими словами, у вас есть два варианта:

  • Вы можете вызвать runAction(_:), если у вас нет обработчика завершения, или

  • вы можете вызвать runAction(_:completion:), если у вас есть обработчик завершения.

Но что вы не можете сделать, так это вызвать runAction(_:completion:), если у вас нет обработчика завершения, как вы пытаетесь сделать.

person matt    schedule 16.06.2015