switch语句中的这个错误的原因是什么?“h必须绑定在每个模式中”? 我基本上试图将h用作小时变量,确保它不是nil(因为小时最初是一个可选值,然后看它是否大于17).我知道我在某个地方
我基本上试图将h用作小时变量,确保它不是nil(因为小时最初是一个可选值,然后看它是否大于17).我知道我在某个地方做错了什么,但那个讨厌的小’必须在每个模式中绑定’错误是什么?
谢谢
let date = NSDate()
let calendar = Calendar.current
let components = calendar.dateComponents([.hour], from: date as Date)
let hour = components.hour
switch hour {
case let h, (h as Int) != nil, h >= 17:
return true
default:
return false
}
你可能需要写这样的东西:
switch hour {
case let h? where h >= 17:
return true
default:
return false
}
或者,如建议的那样,使用if语句:
if let h = hour, h >= 17 {
return true
} else {
return false
}
或者,简单地说:
return hour != nil && hour! >= 17
在此模式中经常会出现错误消息:
enum MyEnum {
case patternA(Int)
case patternB(Int)
case patternC
}
let me = MyEnum.patternB(30)
switch me {
case .patternA(let h), .patternB(let h), .patternC: //<-
print("A or B with h, or C")
default:
print("this may never happen")
}
