Skip to content

Instantly share code, notes, and snippets.

@13hoop
Last active December 12, 2018 01:54
Show Gist options
  • Save 13hoop/14f75ac513b7d610c5800ae0893a6cdb to your computer and use it in GitHub Desktop.
Save 13hoop/14f75ac513b7d610c5800ae0893a6cdb to your computer and use it in GitHub Desktop.
补充1211的东西,除了Sequence本身之外,还要注意一下 代码组合 的方式,并非继承, 而是通过 protocol
//-------- swift 集合类型解读 之 Sequence - 1212
/*
另一个 完备的模拟使用,比如在 终端上的打印所有的输入过程
*/
// a 实现一个 Iterator
struct PrefixIterator: IteratorProtocol {
let str: String
var offset: String.Index
init(string: String) {
self.str = string
offset = string.startIndex
}
typealias Element = String
mutating func next() -> PrefixIterator.Element? {
guard offset < str.endIndex else {
return nil
}
offset = str.index(after: offset)
return String(str[str.startIndex ..< offset])
}
}
// b 在现实 Sequence
struct PrefixSequence: Sequence {
let str: String
typealias Iterator = PrefixIterator
func makeIterator() -> PrefixSequence.Iterator {
return PrefixIterator(string: str)
}
}
// 使用
let preStr = PrefixSequence(str: "abcdefg")
for str in preStr {
print(" -> \(str)")
}
// 输出结果:
// -> a
// -> ab
// -> abc
// -> abcd
// -> abcde
// -> abcdef
// -> abcdefg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment