Цикл for в swift 3


#1

есть цикл

func updateSpeedsOfLine() {
        for var i = 0; i < arrayWithLines?.count; i++ {
            let currentLine = arrayWithLines?.object(at: i) as! LineNode
            currentLine.moveWithSpeed(speedOfLine)
        }
    }

при компиляции выдает ошибку C-style for statement has been removed in Swift 3


#2

В Swift’e нету конструкций i++ и циклов таких тоже.

for object in arrayWithLines {
    let currentLine = object as! LineNode
    currentLine.moveWithSpeed(speedOfLine)
}

#3

Да, классический цикл for убрали в Swift 3. Оператор инкремента и декремента тоже убрали и, вроде тоже в Swift 3, если не в Swift 2.


#4

Доброго времени суток!

Подскажите, пожалуйста, а как грамотно написать альтернативу циклу for, если нужно считать вниз? Например, нужно посчитать что-то от 10 до 0. Что угодно, массив в обратную сторону перебрать, сделать обратный отсчет в консоль, что угодно. То есть:

for i = 10, i > 0, i -- {
//do something
}

Как это сделать правильно на Swift? Я накидал вариант, но он выглядит как бред сумасшедшего, шагающего на костылях:

for i in (-(10) + 1)...0 {
// do something
print(i*(-1))
}

Или же такой конструкции как таковой больше быть не должно и всё необходимо решать введением дополнительных переменных, используемых как счетчик? Что-то вроде этого:

var counter = 10
    for i in 0...10 {
// do something
print("\(counter)")
counter -= 1
}

#5
for i in -10...0 {
    print(i)
}

#6

Добрый вечер!

Спасибо, так правда выглядит проще, что-то я не подумал, так сделать. А если нужно считать от положительной десятки? Я понимаю, что её можно в теле цикла умножать на -1 перед использованием, а без “лишних” действий такое возможно?


#7
for i in stride(from: 10, through: 1, by: -1) {
    print(i)
}

#8

Во как, выглядит почти как исходный цикл for, который убрали в 3 версии. Спасибо, почитаю про stride! :slight_smile:


#9

Добрый вечер. После перерыва вернулся к изучению, как обычно вопрос:

А откуда берутся такие большие числа повторений команды print? O_o В консоль всё выводится нужное количество раз, а тут 286 О_о Это “до свидания, производительность” или какой-то глюк у меня в playground?


#10

Если честно, даже не знаю. В playground’e ни разу не игрался.


#11

скорее глюк
42


#12

Добрый вечер, спасибо за ответы! Напрягают меня эти глюки Playground’a, т.к. не всегда понятно, “лыжи не едут” или я что-то упускаю :frowning:

Кстати, о глюках (не сочтите за оффтоп). Это нормально, что на MacBook Pro 13", 2015, i5 2,7, 16GB RAM у меня Playground думает секунды по 3, чтобы прожевать 10 строчек кода? Я из-за этого поставил эмуляцию в “ручной” режим, т.к. иначе среда постоянно тупит, когда я вношу какие-то правки в код.


#13

Бывает, что и вообще “крутится” по минуте и больше и ничего. Перезагруз только помогает.


#14

надо почистить весь мусор в Xcode. у Xcode это норма. А лучше снести и установить новую , последнюю версию - не обновляя ,а именно переустановить


#15

ODiN, Таких жестких зависаний я помню одно или, максимум, два. Тоже перезаряжался.
TiTi, а как его чистить? Вообще не уверен, что у меня какой-то мусор в нем есть. Я в нем на данный момент кроме Playground ничего не трогаю, т.к. не доучился еще.
Да и сам MacBook как девственник, я на нем только гоняю Xcode и браузер (под программирование его и приобрел).

Спасибо за ответы, но думаю не стоит в этой ветке на эту тему продолжать беседовать.