如何从枚举案例的特定实例中提取关联值?
How can you extract associated values from a specific instance of an enum's case?
考虑这个枚举...
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
那么类似的东西可能吗?
没有任何运行时检查的简单赋值是行不通的,因为
编译器无法知道 selectionMode
变量包含哪个值。
如果你的程序逻辑保证是 .lines
那么
您可以使用模式匹配提取关联值:
guard case .lines(let startLineIndex, _) = selectionMode else {
fatalError("Expected a .lines value")
// Or whatever is appropriate ...
}
考虑这个枚举...
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
那么类似的东西可能吗?
没有任何运行时检查的简单赋值是行不通的,因为
编译器无法知道 selectionMode
变量包含哪个值。
如果你的程序逻辑保证是 .lines
那么
您可以使用模式匹配提取关联值:
guard case .lines(let startLineIndex, _) = selectionMode else {
fatalError("Expected a .lines value")
// Or whatever is appropriate ...
}