下面的第一个函数可以很好地检查FM值,但当我在针对AM值的else-if语句中添加一些验证时,我会收到错误消息:Missing return in a function expected to return Int
。花括号的位置似乎没有问题。
static var minAMFFrequency: Double = 520.0
static var maxAMFFrequency: Double = 1610.0
static var minFMFFrequency: Double = 88.3
static var maxFMFFrequency: Double = 107.9
func isBandFM() -> Int {
if frequency >= RadioStation.minFMFFrequency && frequency <= RadioStation.maxFMFFrequency {
return 1 //FM
} else {
return 0 //AM
}
}
修改的功能有错误:
func isBandFM() -> Int {
if frequency >= RadioStation.minFMFFrequency && frequency <= RadioStation.maxFMFFrequency {
return 1 //FM
} else if frequency >= RadioStation.minAMFFrequency && frequency <= RadioStation.maxAMFFrequency{
return 0 //AM
}
}
您还需要考虑不属于这两种条件的情况。它希望您提供一个默认的返回值。
在第一种情况下,返回的默认值为0。
在第二种情况下,如果frequency
既不在第一个范围(由第一个if
条件指定(中,也不在第二个范围(第二个if
条件指定(内,则需要指定默认返回值。
func isBandFM() -> Int {
if frequency >= RadioStation.minFMFFrequency && frequency <= RadioStation.maxFMFFrequency {
return 1 //FM
} else if frequency >= RadioStation.minAMFFrequency && frequency <= RadioStation.maxAMFFrequency{
return 0 //AM
}
return 0 // or whatever value you want to return if frequency is not within FM range or AM range
}
Sanil已经在这里解释了这个问题,但我将建议进行一些其他改进
使用适当的类型可以更好地表达这一点:
- 一个
Range<Double>
而不是两个单独的Double
- CCD_ 7而不是
0
/1
CCD_ enum
表示命名频带,如"AM"、"FM"或"其他">
struct RadioStation {
enum Band {
case am, fm, other
}
static let amFrequencyRange = 520.0...610.0
static let fmFrequencyRange = 88.3...107.9
let frequency: Double
var isFM: Bool { RadioStation.fmFrequencyRange.contains(frequency) }
var isAM: Bool { RadioStation.amFrequencyRange.contains(frequency) }
var band: Band {
if self.isFM { return .fm }
else if self.isAM { return .am }
else { return .other }
}
}