arrays - Swift 3 - 使类可迭代

标签 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

最佳答案

做到这一点的方法是让你的 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 {

    }
  }

关于arrays - Swift 3 - 使类可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896072/

相关文章:

java - equals 和 compareTo 不一致有意义吗?

javascript - 在不覆盖现有键值的情况下将对象的值添加到对象数组

arrays - Swift - 如何使用另一个数组更改字典数组中一个键的值

arrays - TableViewCell 重复显示数组中的最后一项

swift - Swift 中的线程安全方法操作成本

ios - 在自定义键盘内添加相机 View - Swift 3.0 和 IOS 10

c# - 我如何使用 linq 从索引数组转到对象集合?

arrays - 有没有 O(1) 的方法从 Swift 集合中删除 nil 值?

c++ - 从 vector 中提取成员变量的数组

collections - 将一个元素放在集合的尾部