2015-07-30 2 views
4

This question уже был дан ответ для более ранних версий Swift, но мне интересно, как добавить поддержку «for ... in» к классу в Swift 2. Похоже, что в новой версии Swift достаточно изменилось, чтобы сделать ответ значительно другим. Например, похоже, что вы должны использовать протокол AnyGenerator сейчас?Добавить 'for ... in' поддержку класса в Swift 2

+1

[Этот ответ ] (http://stackoverflow.com/a/31074933/2227743) на странице, с которой вы связаны, по-видимому, решает проблему. – Moritz

+0

Это не отвечает на мой вопрос. Этот код даже не компилируется в Swift 2 – markdb314

+0

Покажите свой код, что вы попробовали? Что именно не работает? – robertvojta

ответ

8

Есть только два изменения :

  • GeneratorOf теперь называется AnyGenerator.

  • GeneratorOf.init(next:) теперь функция anyGenerator()

Это дает нам:

class Cars : SequenceType { 
    var carList : [Car] = [] 

    func generate() -> AnyGenerator<Car> { 
     // keep the index of the next car in the iteration 
     var nextIndex = carList.count-1 

     // Construct a GeneratorOf<Car> instance, passing a closure that returns the next car in the iteration 
     return anyGenerator { 
      if (nextIndex < 0) { 
       return nil 
      } 
      return self.carList[nextIndex--] 
     } 
    } 
} 

(. Я редактировал связанный ответ, соответствующий синтаксис Swift 2)

+0

Спасибо, Роб, это здорово. – pbush25

+0

Спасибо! Я не знал о глобальной функции anyGenerator() – markdb314

+0

Требуется обновление для Swift 2.2 http://stackoverflow.com/questions/36512156/using-anygenerator-with-swift-2-2-for-in-loop- поддержка в обмен на пользовательских классов – Suragch

0

Это происходит прямо из одного из комментариев на ответ на этот вопрос ...

Теперь, когда мы имеем расширение протокола в Swift 2.0, это работает немного по-другому. Вместо того, чтобы в соответствии с SequenceType, один должен просто подкласс AnyGenerator и переопределить метод следующий() для возврата необходимого элемента в итерации (в данном случае, следующий (?) -> Автомобиль)

+0

Да, я это видел, но я хотел бы получить полный пример ... Я попытался реализовать его, и это было не так прямолинейно, как это звучит – markdb314

+0

Не могли бы вы добавить свой код на свой вопрос, показывая, что вы пробовали? – pbush25

+0

Я не понимаю, почему этот комментарий был сделан. 'SequenceType' по-прежнему является протоколом для' for ... in'. Нет необходимости подклассифицировать 'AnyGenerator' для простых применений, подобных этому (хотя это законно, если вы хотите). –

Смежные вопросы