-
字典的索引值不是Key,是
DictionaryIndex
類型DictionaryIndex
是一個指向字典內(nèi)部緩存區(qū)的不透明的值 -
字典索引下標(biāo)訪問返回值不是字典鍵值返回的可選值.返回的是一個確定值
struct Dictionary { ... subscript(key: Key) -> Value? //返回可選值 } protocol Collection { subscript(position: Index) -> Element {get}//返回確定值 }
?
Element
返回的是一個元組:(key: Key, value: Value)
,而下標(biāo)鍵值索引返回的是Value?
是可選值 -
索引值是一個只存存描述元素位置所需最小信息的簡單值.盡可能不持有對集合的引用.集合通常不能分辨索引的歸屬(是否是其他同種類型集合的索引)比如數(shù)組:
let numbers = [1,2,3,4] let squares = numbers.map { $0 * $0 } let numbersIndex = numbers.index(of: 4)! // 3 squares[numbersIndex] // 16
類似String.Index
let hello = "Hello" let world = "World" let helloIdx = hello.startIndex world[helloIdx] // W
在切片上會大量應(yīng)用這個技術(shù)
-
swift2與swift3中對索引遍歷有所改變,
- swift2中索引可以自己進行步進移動
someIndex.successor()
- swift3中交給集合來完成
collection.index(after: someIndex)
在原來自己管理的索引模型中,索引值必須持有對集合的引用,在集合被迭代修改時造成不必要的復(fù)制,浪費性能.
- swift2中索引可以自己進行步進移動
-
滿足
Comparable
- 實現(xiàn)
<
- 實現(xiàn)
==
(繼承自Equatable
)
- 實現(xiàn)
-
切片
切片和原集合共享緩存區(qū),直到集合和切片都銷毀時,內(nèi)存才會被釋放.
Apple警告??:切片只能當(dāng)做臨時計算
在list中因為ARC的存在,當(dāng)沒有引用時,節(jié)點自動釋放,注意的是list后面的節(jié)點不會釋放
-
在
Collection
協(xié)議上的拓展協(xié)議-
BidirectionalCollection
支持前向,后向遍歷的集合 -
RandomAccessCollection
支持高效隨機存取索引遍歷的集合 -
MutableCollection
支持下標(biāo)賦值的集合 -
RangeReplaceableCollection
支持將任意子范圍的元素用別的集合元素替換的集合
?
-