【问题标题】:missing return in a function expected to return 'Double' | What to do?预期返回“双”的函数中缺少返回 |该怎么办?
【发布时间】:2019-03-19 19:31:25
【问题描述】:

以下代码:

protocol ExampleProtocol {
    var simpleDescription: String { get }
    var absoluteValue: Double { get }
    mutating func adjust()
}

extension Double: ExampleProtocol {
    var simpleDescription: String {
        return "The number \(self)"
    }
    var absoluteValue: Double {
        if self < 0 {
            return self * -1
        } else if self > 0 {
            return self
        }
    }
    mutating func adjust() {
        self += 42
    }
}

当尝试使用 simpleDescription 或 absoluteValue 执行它时(例如 print(10.simpleDescription),我只是得到这个错误:

预期会返回“Double”的函数中缺少返回

absoluteValue “函数”返回自身,所以 Double 值,为什么说它缺少一个?

【问题讨论】:

  • 想想self == 0的情况。
  • 您可能只想将 else if self &gt; 0 更改为 else
  • @rmady 非常感谢 - 添加了 else { return 0 },但是如果 self == 0 我怎么能写一个 else 呢?因为如果我添加“else if self == 0”,它会抛出一个错误?

标签: swift return


【解决方案1】:

问题是您的if 语句缺少else 块,没有为self == 0 的情况定义返回值。您可以简单地将else if 分支更改为else,因为您还想为0 返回self

var absoluteValue: Double {
    if self < 0 {
        return self * -1
    } else {
        return self
    }
}

您也可以使用三元运算符将其编写为单行:

var absoluteValue: Double {
    return self < 0 ? self * -1 : self
}

【讨论】:

  • 非常感谢!你是否也知道如果 self 0,else and else if == 0 的想法?因为当我将 else if == 0 添加到函数中时,它不起作用。
  • @DoakCode 你为什么要这样做? else 块正好涵盖了这种情况。编译器根本无法确定那些else if 块覆盖所有可能的值,因此需要else
  • 当然可以,但是如果我需要第三种情况,即 self 等于某个数字,例如 == 0 时的其他情况怎么办?这将如何运作?
  • @DoakCode if-else 块总是需要互斥并覆盖所有可能的情况,如果你想直接从它们返回。因此,在这种情况下,您还需要添加一个 else 块。
  • 不,我的意思是如果例如因为数字“5”和“0”是一个特例,所以我使用 if self > 5, else if == 5, else if
猜你喜欢
  • 2019-05-14
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多