【发布时间】:2016-02-29 12:09:06
【问题描述】:
我正在尝试返回我自己在 Swift 中实现双链表的 head 元素。 我的节点被声明为这样的枚举:
enum DLLNode<Element>{
indirect case Head(element: Element, next: DLLNode<Element>)
indirect case Node(prev: DLLNode<Element>, element: Element, next: DLLNode<Element>)
indirect case Tail(prev: DLLNode<Element>, element: Element)
}
和这样的列表实现:
struct DLList<Element> {
var head:DLLNode<Element>?
...
func getFirst()throws->Element{
if self.isEmpty(){
throw ListError.EmptyList(msg: "")
}
guard case let DLLNode<Element>.Head(element: e, next: _) = head
else{
throw ListError.UnknownError(msg: "")
}
return e
}
}
但我在警卫声明中收到"Invalid pattern"。如果我省略DLLNode<Element> 并保持它像guard case let .Head(element: e, next: _) = head 它给我"Enum case 'Head' not found in 'guard case let DLLNode<Element>.Head(element: e, next: _) = head'"
我究竟做错了什么?或者也许有更好的方法来做到这一点?
【问题讨论】:
标签: swift enums pattern-matching