swift switch语句中出现”必须在每个模式中绑定'h'“错误

cczfrluj  于 2023-02-21  发布在  Swift
关注(0)|答案(2)|浏览(120)

switch语句中出现此错误的原因是什么?
“h”必须装订在每个图案中
我基本上尝试使用h作为hour的变量,确保它不是nil(因为hour最初是一个可选值,然后看看它是否大于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        
}
c2e8gylq

c2e8gylq1#

你可能需要写这样的东西:

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")
}
yftpprvb

yftpprvb2#

当我得到同样的错误时,我尝试了这个:

case .something, .other(let parameter) where parameter != nil:
     doSomething()

我想,Swift 5无法处理如此复杂的表达式,所以我不得不将其拆分:

case .something:
     doSomething()
case .other(let parameter) where parameter != nil:
     doSomething()

相关问题