gpt4 book ai didi

swift - 可选枚举初始值设定项不适用于 where 子句

转载 作者:行者123 更新时间:2023-11-30 10:06:50 24 4
gpt4 key购买 nike

我在使用 where 子句编写 guard 时遇到问题,想要验证我是否正确执行了此操作,或者编译器是否存在错误。

我有这个枚举:

enum Command: String {
case Init
case Update
}

然后是这个守卫声明

let cmdStr = "Init"

guard let command = Command(rawValue: cmdStr) where command != nil else {
print("invalid command: \(cmdStr)") // Error: Value of type Command can never be nil, comparison isn't allowed
return nil
}

我得到的错误很奇怪,因为 rawValue 初始值设定项是可选的初始值设定项。内省(introspection) command 显示它是 Command 类型,尽管初始化器结果是可选的。

但是,如果我首先在保护语句之外执行此操作并像这样重写:

let cmdStr = "Init"
let cmd = Command(rawValue: cmdStr)

guard cmd != nil else {
print("invalid command: \(cmdStr)")
return nil
}

它有效,cmd 的内省(introspection)显示了 Command? 的预期类型

有谁知道为什么会这样吗?或者这是我应该提交的编译器错误?

最佳答案

请阅读有关保护声明的 Apple 文档:

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ControlFlow.html#//apple_ref/doc/uid/TP40014097-CH9-ID525

在你的情况下应该有

let cmdStr = "Init"

guard let command = Command(rawValue: cmdStr) else {
print("invalid command: \(cmdStr)") // Error: Value of type Command can never be nil, comparison isn't allowed
return nil
}

关于swift - 可选枚举初始值设定项不适用于 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com