主要用到的知識是enum的關聯(lián)值。舉個例子。
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:()
}
鏈表的數(shù)據(jù)結(jié)構
用c語言表示如下。包含當前節(jié)點值,和指向下一個節(jié)點的指針。
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進行擴展,實現(xiàn)基本的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指向當前節(jié)點。
2.實現(xiàn)簡單的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增加更加豐富的功能。