Как исправить предупреждение Xcode 7.3: `init` устарел: он будет удален в Swift 3: используйте метод `enumerate()` в последовательности

Из недавнего обновления Xcode 7.3 я начал видеть это сообщение. Я использую последовательность для цикла, как показано ниже:

for (index, product) in EnumerateSequence(self.products) {
     //Do something with the product

     //Do something with the index
}

Записка находится на EnumerateSequence.


person Tal Zion    schedule 31.03.2016    source источник
comment
Вы не задали здесь фактический вопрос, и само предупреждающее сообщение (которое вы процитировали в своем заголовке) говорит вам, как устранить предупреждающее сообщение. Какой у Вас вопрос?   -  person rob mayoff    schedule 31.03.2016


Ответы (2)


Если вам интересно, почему они добавили это предупреждение и собираются удалить EnumerateSequence.init, это потому, что EnumerateSequence является деталью реализации метода enumerate. Они хотят, чтобы вы использовали enumerate, а не полагались на то, как это реализовано.

person rob mayoff    schedule 31.03.2016

После некоторого тестирования это решение можно использовать начиная со Swift 2.2, если вы хотите использовать как index, так и object:

for (index, product) in self.products.enumerate() {
    //Do something with the product

    //Do something with the index
}

Удалите EnumerateSequence и используйте свой метод Array.enumerate()

person Tal Zion    schedule 31.03.2016
comment
Это первый раз, когда ответ на вопрос уже находится в названии вопроса. - person Sulthan; 31.03.2016
comment
В вашем случае вы хотите использовать for index in self.products.indices, нет необходимости в enumerate, если вы не хотите использовать этот элемент. - person Sulthan; 31.03.2016
comment
Я сделал вопрос более ясным, давайте предположим, что нам нужен и индекс, и объект. - person Tal Zion; 31.03.2016
comment
@Sulthan OP также дает свой ответ. Кроме того, это не имеет ничего общего со Swift 2.2, enumerate() существовал со Swift 2.0. - person Van Du Tran; 31.03.2016