where indirect和嵌套enum

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”
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容