如何对枚举的案例进行简单的内联测试,该案例具有您不关心的相关值?

时间:2018-04-18 15:37:24

标签: swift enums swift4 associated-value

鉴于此代码:

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"

如何更新无法编译的部分?

2 个答案:

答案 0 :(得分:0)

三元运算符不能用于具有关联值的枚举,因为经典的等式运算符不能与它们一起使用。您必须使用模式匹配或if case语法:

let title: String
if case .single = selectionType {
    title = "Choose an item"
} else {
    title = "Choose items"
}

答案 1 :(得分:0)

我不知道是否有直接的方式来解决您的需求。

我的理解:

  • 默认情况下,枚举不是等同的,您必须实现Equatable
  • 对于具有相关值的枚举,即使您实施了它,我也不认为可以实现您的要求。

计算变量(解决方法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

使用情况(解决方法2):

if case .single(_) = selectionType {
    print("Choose an item")
}
else {
    print("Choose items")
}