错误:'Missing return in a function expected to return Int'



下面的第一个函数可以很好地检查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已经在这里解释了这个问题,但我将建议进行一些其他改进

使用适当的类型可以更好地表达这一点:

  1. 一个Range<Double>而不是两个单独的Double
  2. CCD_ 7而不是0/1CCD_
  3. 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 }
}
}

相关内容

最新更新