以下代码:
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值,那么为什么会说它缺少一个?
答案 0 :(得分:1)
问题是您的if
语句缺少else
块,对于self == 0
的情况未定义返回值。您只需将else if
分支更改为else
,因为您还想为self
返回0
。
var absoluteValue: Double {
if self < 0 {
return self * -1
} else {
return self
}
}
您还可以使用三元运算符将其写为oneliner:
var absoluteValue: Double {
return self < 0 ? self * -1 : self
}