我定义了一个枚举,我创建了一个计算属性来提取与其中一个案例相关的值。我用switch
:
enum NetworkResult<T> {
case json(T)
case error(Error)
var error: Error? {
switch self {
case .error(let error):
return error
default:
return nil
}
}
}
是否可以在没有任何switch
关键字的情况下实现相同的计算属性?(例如,使用if let
构造?)
答案 0 :(得分:3)
enum NetworkResult<T> {
case json(T)
case error(Error)
var error: Error? {
if case let .error(error) = self {
return error
} else {
return nil
}
}
}
guard case let .error(error) = self else {
return nil
}
return error
答案 1 :(得分:1)
与Peter Cheng建议的if case
构造杂耍,我实际上找到了多种方法来编写它。
让let
在外:
var error: Error? {
if case let .error(error) = self {
return error
}
return nil
}
内置let
:
var error: Error? {
if case .error(let error) = self {
return error
}
return nil
}
守卫等同物......
让let
在外:
var error: Error? {
guard case let .error(error) = self else {
return nil
}
return error
}
内置let
:
var error: Error? {
guard case .error(let error) = self else {
return nil
}
return error
}
最后一个是我个人最喜欢的四种解决方案的语法。