如果您是编程新手,那么现在不是尝试学习 Swift 的好时机。正如您所发现的,Swift 编译器经常给出完全无用的错误消息。你现在可能最好学习 Objective-C。
除此之外,根本问题是您正在尝试使用 from 的返回值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)。编译器需要找到这两者的超类型:一些公共类型,其中SKAction和Void都是子类型。您可以通过将语句更改为以下内容来明确地看到这一点:
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.sequenceand渗透到语法树中SKAction.repeatAction,导致每个错误类型返回错误类型。最后,编译器返回到对runAction. 它试图找到一个runAction将错误类型作为参数的版本。不存在这样的版本,因此(显然是随机的)它会选择该runAction:completion:版本。然后它会注意到您没有将第二个 ( completion) 参数传递给此调用,runAction并给您一条错误消息,通知您失败。这就是为什么编译器不应该做毒品。
那么解决方法是什么?好吧,我不确定你想在你的代码中做什么,因为在一个repeatActionForever动作中做一个repeatAction动作是没有意义的。外部 ( repeatAction) 动作永远不会有机会重复,因为内部 ( repeatActionForever) 动作永远不会停止重复。