如何从枚举案例的特定实例中提取关联值?

时间:2018-02-15 18:07:12

标签: swift enums associated-object

考虑这个枚举...

enum SelectionMode {
    case none     (position:TextPosition)
    case normal   (startPosition:TextPosition, endPosition:TextPosition)
    case lines    (startLineIndex:Int, endLineIndex:Int)
}

如果它被传递给一个函数,你可以使用一个switch语句,每个case接收相关的值,就像这样......

let selectionMode:SelectionMode = .lines(4, 6)

switch sectionMode {
    case let .none   (position): break;
    case let .normal (startPosition, endPosition): break;
    case let .lines  (startLineIndex, endLineIndex):
        // Do something with the indexes here

}

我想知道的是,如果我知道我被交给了一个' .lines'版本,如何在不使用switch语句的情况下获取关联值?

即。我能做这样的事吗?

let selectionMode:SelectionMode = .lines(4, 6)

let startLineIndex = selectionMode.startLineIndex

那么类似的可能吗?

1 个答案:

答案 0 :(得分:1)

没有任何运行时检查的简单分配不会起作用,因为 编译器无法知道selectionMode变量包含哪个值。 如果你的程序逻辑保证它是.lines那么 您可以使用模式匹配来提取关联值:

guard case .lines(let startLineIndex, _) = selectionMode else {
    fatalError("Expected a .lines value")
    // Or whatever is appropriate ...
}