gpt4 book ai didi

swift - 使用 'case'模式匹配直接返回结果

转载 作者:行者123 更新时间:2023-11-28 07:23:42 24 4
gpt4 key购买 nike

这是我的代码:

enum ServerResponse {
case ok, error(Error), rawError(String), resend

func isOk(response: ServerResponse) -> Bool {
case ServerResponse.ok = response
}
}

它没有编译并出现以下错误:

'case' label can only appear inside a 'switch' statement

这很奇怪,因为这是允许的:

func isOk(response: ServerResponse) -> Bool {
if case ServerResponse.ok = response {
return true
}

return false
}

但是正如我们所见,它花费了我额外的代码行。我希望它能工作,因为在 Swift 中,只允许使用 bool 值。 The docs说:

The value of any condition in an if statement must be of type Bool or a type bridged to Bool

这意味着这一行应该评估为一个 bool 值,因为上面的代码编译并且代码行是 if 语句中的条件:

case ServerResponse.ok = response

为什么我不能用它直接在方法中返回一个 bool 值(问题中的第一个代码)?是否有任何 oneliner 检查给定的枚举属性是否是给定的枚举案例?

最佳答案

你只需要让你的enum符合Equatable,那么你甚至不需要大小写,你可以简单地使用== 检查您的 enum 变量是否属于具体情况。

enum ServerResponse {
case ok, error(Error), rawError(String), resend

func isOk(response: ServerResponse) -> Bool {
return response == .ok
}
}

extension ServerResponse: Equatable {
static func == (lhs: ServerResponse, rhs: ServerResponse) -> Bool {
switch (lhs, rhs) {
case ( .ok, .ok):
return true
case (.resend, .resend):
return true
case (.rawError(let string), .rawError(let otherString)):
return string == otherString
case (.error(_), .error(_)):
return true
default:
return false
}
}
}

与您的问题无关,但将 isOk 定义为实例方法并使其接受输入参数没有意义。要么不传入 response 并简单地使用 self == .ok 要么使函数成为类型方法然后传入值。

实例方法:

func isOk() -> Bool {
return self == .ok
}

然后像这样调用它:ServerResponse.ok.isOk()

类型方法:

static func isOk(response: ServerResponse) -> Bool {
return response == .ok
}

然后像这样调用它:ServerResponse.isOk(response: .resend)

关于swift - 使用 'case'模式匹配直接返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57279030/

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