У меня есть простой перечисление, которое я хотел бы перебрать. Для этой цели я принял Sequence и IteratorProtocol, как показано в приведенном ниже коде. Кстати, это может копировать/вставить в Playground в Xcode 8.Итерация через Enum в Swift 3.0
import UIKit
enum Sections: Int {
case Section0 = 0
case Section1
case Section2
}
extension Sections : Sequence {
func makeIterator() -> SectionsGenerator {
return SectionsGenerator()
}
struct SectionsGenerator: IteratorProtocol {
var currentSection = 0
mutating func next() -> Sections? {
guard let item = Sections(rawValue:currentSection) else {
return nil
}
currentSection += 1
return item
}
}
}
for section in Sections {
print(section)
}
Но для в цикле генерирует сообщение об ошибке, «Тип„Sections.Type“не соответствует протоколу„Sequence“» , Сопротивление протокола в моем расширении; так, что не так с этим кодом?
Я знаю, что есть другие способы сделать это, но я хотел бы понять, что не так с этим подходом.
Спасибо.
Есть целый ряд ответов, которые решают проблему здесь (речь идет о типе струнных, но большинство ответов будет работать с любым типом) : http://stackoverflow.com/questions/24007461/how-to-enumerate-an-enum-with-string-type – kevin