Swift 如果基于枚举的变量*不*等于具有关联值的特定情况,最简单的测试方法是什么?
我们有以下枚举和变量Swift 如果基于枚举的变量*不*等于具有关联值的特定情况,最简单的测试方法是什么?,swift,enums,associated-value,Swift,Enums,Associated Value,我们有以下枚举和变量 enum DisplayState{ case loading case loaded(ViewModel) case noResults case error } var displayState:DisplayState = .loading 我们想测试我们是否处于除加载的之外的任何状态 因为有一个关联的值,这当然不起作用 if displayState != .loaded { // Do something } 但我希望
enum DisplayState{
case loading
case loaded(ViewModel)
case noResults
case error
}
var displayState:DisplayState = .loading
我们想测试我们是否处于除加载的之外的任何状态
因为有一个关联的值,这当然不起作用
if displayState != .loaded {
// Do something
}
但我希望除了这两个之外还能找到别的东西
switch displayState{
case .loaded: break
default: // Do something
}
或
那么,最简单的测试方法是什么呢?试试:
enum DisplayState {
case loading
case loaded(ViewModel)
case noResults
case error
var isLoaded: Bool {
switch self {
case .loaded:
return true
default:
return false
}
}
}
var displayState: DisplayState = .loading
if displayState.isLoaded {
// code
}
你一直是一个好问题的来源。这个很有趣!我通常会制作助手计算变量,比如isLoading
,isLoaded
,hasNoResults
,iErrored
,所以我会使用其中的一个。谢谢大家!Swift是一种非常棒的语言,这就是为什么我惊讶于它对于这些简单的测试如此复杂,而你不关心它的值是什么。我觉得我应该能够测试一个值,而忽略它的类型。我可能必须访问Swift Evolution,看看不这样做背后是否有理由。我的意思是,你可以在忽略关联值的情况下对其进行模式匹配,那么为什么不重载相等来做同样的事情呢?是的,我希望有一种针对关联值的枚举的“metaenum”,它可以让你在不特别考虑关联值的情况下讨论案例。有趣的方法。你不得不这样装饰你的物品,真是太遗憾了。我想知道为什么Swift团队不允许简单的检查。我的意思是你可以和它比赛!但这是一个很好的解决办法。让我把它开久一点,看看有没有人能想出别的办法。如果没有,我会将其标记为已接受。@MarqueIV我同意,但是枚举中的计算变量可能是您的最佳选择。
enum DisplayState {
case loading
case loaded(ViewModel)
case noResults
case error
var isLoaded: Bool {
switch self {
case .loaded:
return true
default:
return false
}
}
}
var displayState: DisplayState = .loading
if displayState.isLoaded {
// code
}