#предупреждение: выражение в стиле C устарело и будет удалено в будущей версии Swift

Я просто загружаю новый Xcode (7.3) с быстрым 2.2.

В нем есть предупреждение:

Оператор в стиле C устарел и будет удален в будущей версии Swift.

Как я могу исправить это предупреждение?


person sony    schedule 23.03.2016    source источник
comment
не используйте c-style для циклов для исправления...: P, так как в основном говорится, что ваш код сломается в будущем, так зачем откладывать неизбежное. вместо этого используйте for i in 0...10 { }   -  person Fonix    schedule 23.03.2016
comment
Возможный дубликат stackoverflow .com/questions/36213333/   -  person ivan_pozdeev    schedule 04.04.2016
comment
Не совсем дубликат Replacement for C-style loop в Swift 2.2 — для особых случаев, когда новый стиль не может точно воспроизвести функциональность.   -  person ivan_pozdeev    schedule 04.04.2016


Ответы (4)


Удаление for init; comparison; increment {}, а также удаление ++ и -- легко. и используйте симпатичный цикл for-in Swift

   // WARNING: C-style for statement is deprecated and will be removed in a future version of Swift
   for var i = 1; i <= 10; i += 1 {
      print("I'm number \(i)")
   }

Свифт 2.2:

   // new swift style works well
   for i in 1...10 {
      print("I'm number \(i)")
   }  

Для индекса уменьшения

  for index in 10.stride(to: 0, by: -1) {
      print(index)
  }

Или вы можете использовать reverse() как

  for index in (0 ..< 10).reverse() { ... }

для типа с плавающей запятой (there is no need to define any types to index)

 for index in 0.stride(to: 0.6, by: 0.1) {
     print(index)  //0.0 ,0.1, 0.2,0.3,0.4,0.5
 }  

Свифт 3.0:

Из версии Swift3.0 метод stride(to:by:) в Strideable был заменен бесплатной функцией stride(from:to:by:).

for i in stride(from: 0, to: 10, by: 1){
    print(i)
}

Для индекса декремента в Swift 3.0 вы можете использовать reversed()

for i in (0 ..< 5).reversed() {
    print(i) // 4,3,2,1,0
}

введите описание изображения здесь


Кроме for each и stride(), вы можете использовать While Loops

var i = 0
while i < 10 {
    i += 1
    print(i)
}

Repeat-While Loop:

var a = 0
repeat {
   a += 1
   print(a)
} while a < 10

ознакомьтесь с потоками управления в Руководство по языку программирования Swift

person EI Captain v2.0    schedule 23.03.2016
comment
Этот стиль мы можем, но если мы хотим зациклиться на массиве, и если этот массив имеет нулевое значение, произойдет сбой - person sony; 23.03.2016
comment
@sony: См. эти вопросы и ответы для альтернатив циклу в стиле C, который допускает массивы нулевой длины (без необходимости дополнительных если заявления). - person dfrib; 23.03.2016
comment
да понял ... но это дает вам решение i in <max(0,foo.count-1) - person EI Captain v2.0; 23.03.2016
comment
@ElCaptain: Да, есть несколько способов обойти зацикливание элементов массива, которые могут быть нулевыми, решение max(...), .forEach{ ... }, from.stride(to:by) и т. д. Рад помочь. - person dfrib; 23.03.2016
comment
@EICaptain: как использовать это с CGFloat? До сих пор можно было установить тип индекса. - person Ich; 23.03.2016

Для этого вида цикла «для»:

for var i = 10; i >= 0; --i {
   print(i)
}

Ты можешь написать:

for i in (0...10).reverse() {
    print(i)
}
person coldfire    schedule 23.03.2016

Я получил ту же ошибку с этим кодом:

for (var i = 1; i != video.getAll().count; i++) {
    print("show number \(i)")
}

Когда вы пытаетесь исправить это с помощью Xcode, вам не повезло... Поэтому вам нужно использовать новый стиль Swift (для цикла):

for i in 1...video.getAll().count {
    print("show number \(i)")
}
person SDW    schedule 23.03.2016
comment
как использовать для декремента? - person sony; 23.03.2016

Цитата

Используйте это вместо

if(myarr.count)
{
    for i in 1...myarr?.count {
      print(" number is \(i)")
    }
}
person Moin Shirazi    schedule 23.03.2016
comment
Как использовать для декремента? - person sony; 23.03.2016
comment
Обратитесь к этому stackoverflow.com/questions /35032182/ - person Moin Shirazi; 23.03.2016
comment
@сони for i in myarr.count.stride(to: 0, by: -1) { ... } - person dfrib; 23.03.2016