indirect 间接 和 嵌套 enum

2017-02-04  本文已影响10人  fordring2008

class Node{   

 let value: T?   

 let next: Node?        

init(value: T?, next: Node?) {        

self.value = value        

self.next = next   

 }

}

let list = Node(value: 1,                next: Node(value: 2,                          next: Node(value: 3,                                      next: Node(value: 4, next: nil))))

// 单向链表  1 -> 2 -> 3 -> 4

// 上面的单向列表,用 nil 表示空节点, 不容易理解,也不好维护

// Swift2 中可以使用 嵌套 enum

 // 这里会提示嵌套 enum 需要加上  indirect 间接

indirect enum LinkedList{    

case empty    

case node(Element, LinkedList)       

 // 链表节点的删除方法   

 func removing(_ element: Element) ->LinkedList{

guard case let .node(value, next) = self else {

return .empty

}

return value == element ? next : LinkedList.node(value, next.removing(element))

}

}

// 单项链表

let linkedList = LinkedList.node(1, .node(2, .node(3, .node(4, .empty))))

let result = linkedList.removing(2)

上一篇下一篇

猜你喜欢

热点阅读