主要用到的知识是enum的关联值。举个例子。
enum Result {
case Success
case Failure(code: Int, errorMsg: String)
}
let result = Result.Failure(code: 1, errorMsg: "network error!")
switch result {
case .Failure(let code, let msg):
print("code:\(code), msg:\(msg)")
default:()
}
链表的数据结构
用c语言表示如下。包含当前节点值,和指向下一个节点的指针。
struct List {
int value;
List *next;
};
用enum表示。
enum List<Element> {
case Empty
indirect case Item(value: Element, next: List)
}
indirect表示用于声明递归的enum,因为next是enum List类型。
1.对List进行扩展,实现基本的insert方法。
extension List {
// insert front
func insert(x: Element) -> List {
return List.Item(value: x, next: self)
}
func description() {
var t = self;
while case let List.Item(value, next) = t {
print(value)
t = next
}
}
}
注意:insert是将node插到最前面的。next指向当前节点。
2.实现简单的push,pop方法。
extension List {
mutating func push(x: Element) {
self = self.insert(x)
}
mutating func pop() -> Element? {
switch self {
case .Empty:
return nil
case let .Item(x, next):
self = next
return x
}
}
}
因为修改了List,所以要用mutating。
测试代码
var l = List<Int>.Empty.insert(2).insert(3).insert(4)
l.description()
l.pop()
l.push(2)
这样就完成了List的基本功能。下一篇将会对List增加更加丰富的功能。