无法使用类型为“(distance: (CGVector, fadeInWithDuration: Double))”的参数列表调用 'moveDistance'

Cannot invoke 'moveDistance' with an argument list of type '(distance: (CGVector, fadeInWithDuration: Double))'

运行 一种 SKAction 方法,但语法有一些问题。我从头开始,按照 Xcode 8 代码完成告诉我的方式填写所有内容,但仍然没有运气。

Cannot invoke 'moveDistance' with an argument list of type '(distance: (CGVector, fadeInWithDuration: Double))'

a.swift

extension SKAction {
class func moveDistance(distance:CGVector, fadeInWithDuration duration:TimeInterval) -> SKAction {
    let fadeIn = SKAction.fadeIn(withDuration: duration)
    let moveIn = SKAction.move(by: distance, duration: duration)
    return SKAction.group([fadeIn, moveIn])
}
}

b.swift

// legacy
// //gameOverLayer?.runAction(SKAction.moveDistance(CGVectorMake(0, 100), fadeInWithDuration: 0.2)))

// Swift 3
gameOverLayer?.run(SKAction.moveDistance(distance: (CGVector(dx: 0, dy: 100), fadeInWithDuration: 0.2)))

几小时后我意识到我添加了太多的括号......是的菜鸟。

您可以重构您的扩展方法,使其更易于调用,如下所示:

extension SKAction {
    class func move(dx: CGFloat, dy: CGFloat, fadeIn duration: TimeInterval) -> SKAction {
        return SKAction.group([ SKAction.fadeIn(withDuration: duration),
                                SKAction.move(by: CGVector(dx: dx, dy: dy), duration: duration) ])
    }
}

用法:

SKAction.move(dx: 0, dy: 100, fadeIn: 0.2)