有人可以解释为什么我收到一条错误消息,当我更改一行代码时,我错过了一个返回

时间:2017-06-26 14:58:07

标签: swift compiler-errors

此行不会给我任何错误:

if pendingBinaryOperation != nil && accumulator != nil {
    return (accumulator!.digit, true, pendingBinaryOperation!.description(pendingBinaryOperation!.descriptionOperand, accumulator?.literalDescription ?? " "), accumulator?.errorMessage)
} else  {
    return (accumulator!.digit, false, calculationDescription ?? "", accumulator?.errorMessage)
}

但是这行确实给了我一个错误:

if pendingBinaryOperation != nil && accumulator != nil {
    return (accumulator!.digit, true, pendingBinaryOperation!.description(pendingBinaryOperation!.descriptionOperand, accumulator?.literalDescription ?? " "), accumulator?.errorMessage)
} else if accumulator!.digit != nil {
    return (accumulator!.digit, false, calculationDescription ?? "", accumulator?.errorMessage)
}

信息是: 在期望返回的函数中缺少返回'(结果:Double?,isPending:Bool,description:String,errorMessage:String?)'(又名'(结果:可选,isPending:Bool,description:String,errorMessage:Optional)' )

4 个答案:

答案 0 :(得分:1)

我认为在第二个代码中你将两个返回包装在" IF"它假定可能存在一种情况都不是真的,因此根本不会有任何回报。

答案 1 :(得分:0)

我想到的唯一可能的原因是获取此错误消息是因为您的程序流程。

在第一种情况下,它总是根据此pendingBinaryOperation != nil && accumulator != nil的值返回一些内容。

然而,在第二种情况下,pendingBinaryOperation != nil && accumulator != nil 错误accumulator!.digit != nil 错误的程序流程,您的代码无法返回某些内容所以它提供了错误消息

答案 2 :(得分:0)

第二段代码中有一些未解决的条件。

if pendingBinaryOperation != nil && accumulator != nil {
    return (accumulator!.digit, true, pendingBinaryOperation!.description(pendingBinaryOperation!.descriptionOperand, accumulator?.literalDescription ?? " "), accumulator?.errorMessage)
} else if accumulator!.digit != nil {
    return (accumulator!.digit, false, calculationDescription ?? "", accumulator?.errorMessage)
}

这是你的代码。让我们先看一下accumulatorpendingBinaryOperation秒的可能方案:

  • accumulator != nilpendingBinaryOperator != nil。第一个子句被执行。
  • accumulator != nilpendingBinaryOperator == nil。第二个条款被执行。
  • accumulator == nilpendingBinaryOperator != nil || pendingBinaryOperator !== nil。没有提供退货。

这是两个没有回报的情景。

答案 3 :(得分:0)

发生错误是因为第二个表达式并非详尽无遗。

如果第一和第二条件都被评估为false,则没有返回值。这就是错误消息所说的。

您需要额外的else分支

if .... {
    return ...
} else if ... {
    return ...
} else {
    return ...
}
最后

return语句

if .... {
    return ...
} else if ... {
    return ...
} 
return ...