swift 中很好用的for循環(huán)語句for...in.它的實現(xiàn)原理是需要遵循SequenceType,且要縣遵循GenreatorType 先看下面例子
//先定義一個實現(xiàn)了 GenreatorType Protocol的類型
`class TestList: SequenceType {
private var testList:[Test]?
init() {
self.testList = [Test]()
}
func addTest(test:test){
self.testList?.append(book)
}
typealias Generator = BookListGenerator
func generate() -> Generator {
return testListGenerator(bookList: self.bookList!)
}
}`
class test {
var name:String = ""
init(name: String) {
self.name = name
}
}
class TestListGenerator : GeneratorType {}
typealias Element = Book
var currentIndex:Int = 0
var testList:[Test]?
init(testList: [Test]) {
self.testList = bookList
}
func next() -> Element? {
guard let list = testList else { return nil }
if currentIndex < list.count {
let element = list[currentIndex]
currentIndex += 1
return element
}else {
return nil
}
}
}
let testList = testList()
testList.addTest(Test(name: "Swift"))
testList.addTest(Test(name: "iOS" ))
for test in testList {
print("\(test.name)")
}
- 看了上述的例子,大致可以自定義一個可以for...in的對象了
- 更驚喜的是我不還可以使用想數(shù)組的map\filter、reduce方法,這因為SquenceType已經(jīng)擴展實現(xiàn)了它們