Swift 3 - 使类可迭代

时间:2017-07-04 02:25:05

标签: arrays swift collections iterator sequence

考虑我的两个班级:

// Person.swift
class Person {
    var parents: Parents?
    // ...
}

// Parents.swift. Only a collection of parents with some helper methods.
class Parents {
    var parents = [Person]()
    // ...
}

如何使用Parents的迭代器使parents在for循环中进行迭代。这不是一个真实的应用程序。我只是好奇。只是想使用for parent in myParents而不是for parent in myParents.parents

1 个答案:

答案 0 :(得分:3)

执行此操作的方法是让您的Parents类符合Sequence Protocol,实施makeIterator方法,然后通过调用makeIterator传递结果包含的Array<Person>

  // Person.swift
  class Person {
    var parents: Parents?
    // ...
  }

  // Parents.swift. Only a collection of parents with some helper methods.
  class Parents{
    var parents = [Person]()
    // ...
  }

  // conform to Sequence Protocol
  extension Parents: Sequence {
    func makeIterator() -> Array<Person>.Iterator {
      return parents.makeIterator()
    }
  }

  let myself = Person()
  if let myParents = myself.parents {
    for person in myParents {

    }
  }