Swift 如何从枚举案例的特定实例中提取关联值?
考虑一下这个枚举Swift 如何从枚举案例的特定实例中提取关联值?,swift,enums,associated-object,Swift,Enums,Associated Object,考虑一下这个枚举 enum SelectionMode { case none (position:TextPosition) case normal (startPosition:TextPosition, endPosition:TextPosition) case lines (startLineIndex:Int, endLineIndex:Int) } 如果它被传递到一个函数中,您可以使用switch语句,每个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语句的情况下获得相关的值
i、 我可以这样做吗
let selectionMode:SelectionMode = .lines(4, 6)
let startLineIndex = selectionMode.startLineIndex
那么类似的事情是否可能发生呢?没有任何运行时检查的简单赋值将不起作用,因为 编译器无法知道selectionMode变量包含的值。 如果程序逻辑保证它是.line,那么 您可以通过模式匹配提取关联的值:
guard case .lines(let startLineIndex, _) = selectionMode else {
fatalError("Expected a .lines value")
// Or whatever is appropriate ...
}
完美的正是我想要的。谢谢太神了这甚至适用于if语句。如果case.lineslet startIneIndex,{uu=selectionMode{//do stuff}