where和模式匹配
case中用where:
let name = ["李一", "張三", "李二", "王四"]
name.forEach {
switch $0 {
case let x where x.hasPrefix("李"):
print("\(x)是李家的人")
default:
print("hello:\($0)")
}
}
輸出:
李一是李家的人
hello:張三
李二是李家的人
hello:王四
也可以用if let:
if let score = $0 where score > 60 {}
for score in numArray where score > 60{}
- where 限定協(xié)議
sequenceType 的sort方法:
extension SequenceType where Self.Generator.Element: Comparable {
public fund sort() -> [self.Generator.Element]
}
indirect和嵌套enum
- 定義一個單向鏈表:
indirect enum LinkedList<Element: Comparable> {
case Empty
case Node(Element, LinkedList<Element>)
}
let linkedList = LinkedList.Node(1, .Node(2, .Node(3, .Node(4, .Empty))))
//1->2->3->4
對于像struct enum值類型,加上indirect編譯器會加入中間層,可以遞歸。實現(xiàn)鏈表中刪除節(jié)點只需要在enum中加入:
func linkedListByRemovingElement(element: Element) -> LinkedList<Element> {
guard case let .Node(value, next) = self else {
return .Empty
}
return value == element ? next : LinkedList.Node(value, next.linkedListByRemovingElement(element))
}
//測試結(jié)果
“l(fā)et result = linkedList.linkedListByRemovingElement(2)
print(result)
// 1 -> 3 -> 4”