Last active
December 12, 2018 01:54
-
-
Save 13hoop/14f75ac513b7d610c5800ae0893a6cdb to your computer and use it in GitHub Desktop.
补充1211的东西,除了Sequence本身之外,还要注意一下 代码组合 的方式,并非继承, 而是通过 protocol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//-------- 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