Согласно документации:
init (_ s: S) где Element == S.Element, S: Sequence
Создает массив, содержащий элементы последовательности.
struct Test: IteratorProtocol, Sequence {
let id: Int
init(_ id: Int) {
self.id = id
}
mutating func next() -> Test? {
id < 10 ? Test(id + 1) : nil
}
}
let test = Test(5)
let arr = Array(test)
Компилируется. И даже не выдает никаких ошибок времени выполнения.
Но вместо того, чтобы в результате получить массив [5, 6, 7, 8, 9], я получаю бесконечное l oop! next()
вызывается бесконечно много раз.
Я думал, что nil
в next()
является естественным индикатором конца последовательности. Но, видимо, это не так.