indirect和嵌套enum
- 在enum的定义中嵌套自身对于class这样的引用类型来说没有任何问题,但是对于像struct或enum这样的值类型来说,普通的做法是不可行的。我们需要在定义前面加上indirect来提示编译器不要在值类型中直接嵌套。
- 通过嵌套enum来定义链表结构
indirect enum LinkedList<Element: Comparable> {
case Empty
case Node(Element, LinkedList<Element>)
func linkedListRemovingElement(element: Element) -> LinkedList<Element> {
guard case let .Node(value,next) = self else {
return .Empty
}
return value == element ? next : LinkedList.Node(value, next.linkedListRemovingElement(element: element))
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let linkedList = LinkedList.Node(1, .Node(2, .Node(3, .Node(4, .Empty))))
let resultList = linkedList.linkedListRemovingElement(element: 2)
print(resultList)
}
}
网友评论