3. Swift Sequence
Sequence
是集合類資料結構中的一個基礎協議。
協議是個什麼東西?
我們使用一個比較簡單的協議來舉個例子:Equatable
協議。
其定義為:
public protocol Equatable {
public static func ==(lhs: Self, rhs: Self) -> Bool
}
在String
和Int
中我們可以找到,但是並看不到具體實現。但是我們可以知道 2個str相等那麼就必須str的每個字母都相同,2個int相等沒啥好說的。那麼比較2個字典呢,我們到標頭檔案裡面看,他分別是key和value遵守了這個協議。還有其他型別的資料結構,我們也可以遵守這個協議,並實現相應的方法。
從此我們可以理解為定義協議就是為了讓我們更好的用更自然更統一的方式去表達相近的邏輯,更好的管理物件導向程式設計中比較類似邏輯的一種手段(純屬個人理解,不喜勿噴?)。比如 2==2 、 [] == [] 、 小明 == 小明 我們程式中判斷2個東西是否相同,這個相同就可以用==
表示,具體怎麼相同我們規定了一個比較函式,具體比較規則自己去實現。
一個簡單例子:
struct MLJ: Equatable {
var a: String = ""
var b: String = ""
static public func ==(lhs: MLJ, rhs: MLJ) -> Bool {
if lhs.a == rhs.a && lhs.b == rhs.b {
return true
} else {
return false
}
}
}
滿足Sequence 協議的要求十分簡單,你需要做的所有事情就是提供一個返回迭代器 的makeIterator()
方法。
// 每次產生一個 99 的迭代器
struct AIterator: IteratorProtocol {
typealias Element = Int
mutating func next() -> AIterator.Element? {
return 99
}
}
struct BSequence: Sequence {
func makeIterator() -> AIterator {
return AIterator()
}
}
// 會一直列印99 不會終止
let bs = BSequence()
for b in bs {
print(b)
}
Tips:
-
associatedtype
這個東西一般用於協議裡面使用泛型的時候使用,所謂的泛型就是任意型別。 -
typealias
定義一個型別。
相關文章
- Interview-Increasing Sequence with Length 3.View
- Swift設計模式:3.抽象工廠方法模式Swift設計模式抽象
- 設計模式(Swift) - 3.觀察者模式、建造者模式設計模式Swift
- sequence to sequence模型模型
- ORACLE SEQUENCEOracle
- Sequence recognition
- ORACLE SEQUENCE用法Oracle
- PostgreSQL 序列(Sequence)SQL
- PostgreSQL sequence (一)SQL
- Oracle - Sequence序列Oracle
- Oracle Sequence NocacheOracle
- Oracle序列sequenceOracle
- 【轉】MySQL中增加sequence管理功能(模擬建立sequence)MySql
- 3.磁碟命令
- 3. Post and Get
- python sequence序列Python
- mysql實現sequenceMySql
- Oracle之Sequence(序列)Oracle
- request gap sequence is FailedAI
- ACM Longest Repeated SequenceACM
- Oracle Sequence Audses$研究Oracle
- oracle sequence語法Oracle
- oracle sequence 試用Oracle
- 詳解序列(sequence)
- 3. PHP 引用解惑PHP
- Bootstrap系列 -- 3. 段落boot
- 3.建立型模式模式
- oracle的scn及sequenceOracle
- Linux_Arithmetic_SequenceLinux
- DeepLearning – Overview of Sequence modelView
- Oracle中Sequence的使用Oracle
- Sequence 批量更改與建立
- Overview of the Sequence Generator (192)View
- 3. gitlab安裝Gitlab
- 3.協議與埠協議
- 3.建構函式函式
- 3.管理例程(筆記)筆記
- Least Cost Bracket Sequence(貪心)ASTRacket