From dbfbc729ae966530179300e9272b09f2ccf1053a Mon Sep 17 00:00:00 2001 From: LKIN <> Date: Sat, 28 Sep 2019 14:31:31 +0800 Subject: [PATCH] oddified C3P4 --- ...06\345\220\210\347\261\273\345\236\213.md" | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git "a/\347\254\254\344\270\211\347\253\240\357\274\232\351\233\206\345\220\210\347\261\273\345\236\213\345\215\217\350\256\256/3.5\344\270\223\351\227\250\347\232\204\351\233\206\345\220\210\347\261\273\345\236\213.md" "b/\347\254\254\344\270\211\347\253\240\357\274\232\351\233\206\345\220\210\347\261\273\345\236\213\345\215\217\350\256\256/3.5\344\270\223\351\227\250\347\232\204\351\233\206\345\220\210\347\261\273\345\236\213.md" index d1d7b3f..a53237f 100644 --- "a/\347\254\254\344\270\211\347\253\240\357\274\232\351\233\206\345\220\210\347\261\273\345\236\213\345\215\217\350\256\256/3.5\344\270\223\351\227\250\347\232\204\351\233\206\345\220\210\347\261\273\345\236\213.md" +++ "b/\347\254\254\344\270\211\347\253\240\357\274\232\351\233\206\345\220\210\347\261\273\345\236\213\345\215\217\350\256\256/3.5\344\270\223\351\227\250\347\232\204\351\233\206\345\220\210\347\261\273\345\236\213.md" @@ -21,19 +21,16 @@ #### BidirectionalCollection: -```sufix```, ```removeLast``` 和 ```reversed``` 就是由它来提供。是不是很熟悉 - +它提供了```sufix()```, ```removeLast()``` 和 ```reversed()``` 几个我们看起来很眼熟的函数很熟悉 #### RandomAccessCollection 和BidirectionalCollection ```index(_:offsetBy:)```` 去通过渐进的方式去遍历, 相比 RandomAccessCollection 可以 ```直接在两个索引之间``来移动。 -例如计算 startIndex 和 endIndex 的间距。 RandomAccessCollection可以在```常数时间内```计算出count 而其他就会慢很多。 +例如计算 startIndex 和 endIndex 的间距。 RandomAccessCollection可以在```常数时间内```计算出count,相对高效,而其他就会慢很多。 #### MutableCollection -支持原地的元素更改。 -只能改变集合的元素值,无法改变``集合的长度``或``元素的顺序``。 -MutableCollection 只多了一个required func: - ```subscript``` 而且要必须提供一个 ```setter``` - +它支持原地的元素更改。 +一般的集合只能改变集合的元素值,无法改变``集合的长度``或``元素的顺序``。 +MutableCollection 只多了一个必须要实现的方法```subscript``` ,而且必须要实现其内部的set方法 ///协议方法 public subscript(position: Self.Index) -> Self.Element { get set } @@ -49,13 +46,12 @@ MutableCollection 只多了一个required func: } -注:编译器不会让我们向一个已经存在的Collection通过扩展```添加下标的setter方法``` 原因有二: -1.要提供setter就要提供getter -2.无法重新定义已存在的getter方法 -所以我们只能重新写一个协议去替换collection 所以要重新去写getter setter方法。 - -知识点1:Array Dict Set 中只有```Array```满足这个协议。 +~~注:编译器不会让我们向一个已经存在的Collection通过扩展```添加下标的setter方法``` 原因有二:~~ +~~1.要提供setter就要提供getter~~ +~~2.无法重新定义已存在的getter方法~~ +~~所以我们只能重新写一个协议去替换collection 所以要重新去写getter setter方法。~~ +##### 知识点1:集合类型 Array Dict Set 中只有```Array```满足这个协议。 #### RangeReplaceableCollection 需要添加或者移除元素可以用这个协议 @@ -63,13 +59,8 @@ MutableCollection 只多了一个required func: 1.一个```空的初始化方法```(在泛型函数中很好用,因为泛型允许一个函数创建相同类型的 新的空集合) 2.```replaceSubrange(_:with:)```方法 参数为范围和要替换的集合。 - #### 组合能力 我们可以将上面这些特殊的集合协议``组合起来```,来达到我们想要的效果。 - # 本章回顾 集合类型主要是由 ```Sequence``` 和 ```Collection``` 协议构成了 - -###### TODO 内容知识点后期可以更生动形象的写出来 -