您如何对具有您不关心的关联值的枚举案例进行简单的在线测试?
How can you do a simple inline test for an enumeration's case that has associated values you don't care about?
鉴于此代码:
class Item{}
func foo(item:Item){}
enum SelectionType{
case single(resultsHandler:(Item)->Void)
case multi(resultsHandler:([Item])->Void)
}
var selectionType:SelectionType = .single(resultsHandler:foo)
// This line won't compile
let title = (selectionType == .single)
? "Choose an item"
: "Choose items"
如何更新无法编译的部分?
三元运算符不能用于具有关联值的枚举,因为经典的相等运算符不适用于它们。您必须使用模式匹配,或 if case
语法:
let title: String
if case .single = selectionType {
title = "Choose an item"
} else {
title = "Choose items"
}
我不知道是否有直接的方法可以解决您的问题。
我的理解:
- 默认情况下枚举是不可等式的,你必须实现可等式
- 对于具有关联值的枚举,即使您实现了它,我认为也无法实现您所要求的。
计算变量(解决方法 1):
enum SelectionType{
case single(resultsHandler:(Item)->Void)
case multi(resultsHandler:([Item])->Void)
var title : String {
let text : String
switch self {
case .single(_):
text = "Choose an item"
case .multi(_):
text = "Choose items"
}
return text
}
}
var title = selectionType.title
使用 if case(解决方法 2):
if case .single(_) = selectionType {
print("Choose an item")
}
else {
print("Choose items")
}
鉴于此代码:
class Item{}
func foo(item:Item){}
enum SelectionType{
case single(resultsHandler:(Item)->Void)
case multi(resultsHandler:([Item])->Void)
}
var selectionType:SelectionType = .single(resultsHandler:foo)
// This line won't compile
let title = (selectionType == .single)
? "Choose an item"
: "Choose items"
如何更新无法编译的部分?
三元运算符不能用于具有关联值的枚举,因为经典的相等运算符不适用于它们。您必须使用模式匹配,或 if case
语法:
let title: String
if case .single = selectionType {
title = "Choose an item"
} else {
title = "Choose items"
}
我不知道是否有直接的方法可以解决您的问题。
我的理解:
- 默认情况下枚举是不可等式的,你必须实现可等式
- 对于具有关联值的枚举,即使您实现了它,我认为也无法实现您所要求的。
计算变量(解决方法 1):
enum SelectionType{
case single(resultsHandler:(Item)->Void)
case multi(resultsHandler:([Item])->Void)
var title : String {
let text : String
switch self {
case .single(_):
text = "Choose an item"
case .multi(_):
text = "Choose items"
}
return text
}
}
var title = selectionType.title
使用 if case(解决方法 2):
if case .single(_) = selectionType {
print("Choose an item")
}
else {
print("Choose items")
}