【问题标题】:Missing argument for parameter 'completion' in call调用中缺少参数“完成”的参数
【发布时间】:2015-03-02 23:54:49
【问题描述】:

我正在尝试运行一个等待 60 秒的 sksequence,然后开始一个无限循环,但我不断收到编译器错误“调用中的参数“完成”缺少参数”这是我的代码:

runAction(SKAction.repeatAction((SKAction.sequence(([SKAction.waitForDuration(60),
        runAction(SKAction.repeatActionForever(
            SKAction.sequence([
                SKAction.runBlock(addBlock1),
                SKAction.runBlock(actualDuration1Reduc),
                SKAction.waitForDuration(blockWait1),])))]))), count: 1))

有人可以帮帮我吗?我是编程新手,所以请记住这一点。谢谢

【问题讨论】:

  • 看在上帝的份上,请把它分成几部分......

标签: swift compiler-errors completion


【解决方案1】:

如果您是编程新手,那么现在不是尝试学习 Swift 的好时机。正如您所发现的,Swift 编译器经常给出完全无用的错误消息。现在学习 Objective-C 可能会更好。

除此之外,根本问题是您正在尝试使用来自runAction 的返回值,这里:

runAction(SKAction.repeatAction((SKAction.sequence(([SKAction.waitForDuration(60),
    runAction(SKAction.repeatActionForever(
    ^^^^^^^^^
        SKAction.sequence([
            SKAction.runBlock(addBlock1),
            SKAction.runBlock(actualDuration1Reduc),
            SKAction.waitForDuration(blockWait1),])))]))), count: 1))

您在这里尝试创建一个包含两个元素的数组:SKAction(由waitForDuration(60) 返回)和Void(由runAction 返回)。编译器需要找到这两者的超类型:SKActionVoid 都是子类型的一些常见类型。您可以通过将语句更改为以下内容来明确地看到这一点:

let a = [SKAction.waitForDuration(60),
    runAction(SKAction.repeatActionForever(
        SKAction.sequence([
            SKAction.runBlock(addBlock1),
            SKAction.runBlock(actualDuration1Reduc),
            SKAction.waitForDuration(blockWait1)])))]

这里的编译器会生成一个更有用(但初学者可能仍然难以理解)的错误消息,“'SKAction' is not convertible to 'Void'”:

那么为什么你会收到那个无用的错误消息呢?好吧,如果您在我的示例中选择单击a 变量,您会发现编译器已为a 分配了一个特殊的“错误类型”:

回到您的原始代码中,此错误类型通过尝试调用SKAction.sequenceSKAction.repeatAction 渗透到语法树中,导致其中每个都返回错误类型。最后,编译器返回到对runAction 的顶级调用。它试图找到将错误类型作为参数的runAction 版本。不存在这样的版本,因此(显然是随机的)它选择了runAction:completion: 版本。然后它会注意到您没有将第二个 (completion) 参数传递给此调用到 runAction,并给您一条错误消息,通知您失败。这就是为什么编译器不应该做毒品。

那么解决方法是什么?好吧,我不确定您要在代码中做什么,因为在 repeatAction 操作中执行 repeatActionForever 操作毫无意义。外部 (repeatAction) 操作永远不会有机会重复,因为内部 (repeatActionForever) 操作永远不会停止重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多