[swift 進(jìn)階]讀書筆記-集合類型協(xié)議 C3P5_專門的集合類型

集合類型協(xié)議

3.5專門的集合類型:Special Collection

對(duì)于collection來(lái)說(shuō),有兩個(gè)有意思的限制
1.無(wú)法將索引后退移動(dòng)。
2.沒有提供插入,移動(dòng),替換元素的功能。
雖然只是有一部分集合可以使用他們,但作為標(biāo)準(zhǔn)庫(kù)。就只寫一些通用的方法。

在標(biāo)準(zhǔn)庫(kù)中有四個(gè)針對(duì)于collection 補(bǔ)充的協(xié)議

    //一個(gè)既可以前向又可以后向遍歷的集合
    BidirectionalCollection
    //一個(gè)可以高效隨機(jī)存取索引遍歷的集合
    RandomAccessCollection
    //一個(gè)可以下標(biāo)賦值的集合
    MutableCollection
    //一個(gè)可以將任意子范圍的元素用別的集合中的元素進(jìn)行替換的集合
    RangeReplaceableCollection

BidirectionalCollection:

sufix, removeLastreversed 就是由它來(lái)提供。是不是很熟悉

RandomAccessCollection

和BidirectionalCollection index(_:offsetBy:)```` 去通過漸進(jìn)的方式去遍歷, 相比 RandomAccessCollection 可以直接在兩個(gè)索引之間``來(lái)移動(dòng)。
例如計(jì)算 startIndex 和 endIndex 的間距。 RandomAccessCollection可以在常數(shù)時(shí)間內(nèi)計(jì)算出count 而其他就會(huì)慢很多。

MutableCollection

支持原地的元素更改。
只能改變集合的元素值,無(wú)法改變集合的長(zhǎng)度元素的順序。
MutableCollection 只多了一個(gè)required func:
subscript 而且要必須提供一個(gè) setter

    ///協(xié)議方法
    public subscript(position: Self.Index) -> Self.Element { get set }



public subscript(position: Element) -> Element {
 get {
return Element 
} 
set {
//必須要提供
}
}

注:編譯器不會(huì)讓我們向一個(gè)已經(jīng)存在的Collection通過擴(kuò)展添加下標(biāo)的setter方法 原因有二:
1.要提供setter就要提供getter
2.無(wú)法重新定義已存在的getter方法
所以我們只能重新寫一個(gè)協(xié)議去替換collection 所以要重新去寫getter setter方法。

知識(shí)點(diǎn)1:Array Dict Set 中只有Array滿足這個(gè)協(xié)議。

RangeReplaceableCollection

需要添加或者移除元素可以用這個(gè)協(xié)議
有兩個(gè)要求:
1.一個(gè)空的初始化方法(在泛型函數(shù)中很好用,因?yàn)榉盒驮试S一個(gè)函數(shù)創(chuàng)建相同類型的 新的空集合)
2.replaceSubrange(_:with:)方法 參數(shù)為范圍和要替換的集合。

組合能力

我們可以將上面這些特殊的集合協(xié)議``組合起來(lái)```,來(lái)達(dá)到我們想要的效果。

本章回顧

集合類型主要是由 SequenceCollection 協(xié)議構(gòu)成了

TODO 內(nèi)容知識(shí)點(diǎn)后期可以更生動(dòng)形象的寫出來(lái)

文章源文件地址

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

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