Я пытаюсь удалить все элементы массива с помощью цикла for следующим образом:
for index 1...myArray.count {
myArray.removeAtIndex(index)
}
Но это не сработает, я получаю эту ошибку перед запуском:
Ожидаемый ';' в выражении 'for'
Я пытаюсь удалить все элементы массива с помощью цикла for следующим образом:
for index 1...myArray.count {
myArray.removeAtIndex(index)
}
Но это не сработает, я получаю эту ошибку перед запуском:
Ожидаемый ';' в выражении 'for'
Существует метод (фактически функция)
myArray.removeAll()
Принимая во внимание, что ответ @vadian - это решение, я просто хочу указать, что ваш код не работает.
Прежде всего, индексы массива основаны на 0, поэтому вы должны переписать диапазон соответственно:
for index 0..<myArray.count {
myArray.removeAtIndex(index)
}
Однако эта реализация приведет к сбою. Если у вас есть массив из 10 элементов, последний элемент занимает позицию в индексе 9.
Используя этот цикл, на первой итерации элемент с индексом 0 удаляется, и это приводит к тому, что последний элемент сдвигается вниз по индексу 8.
На следующей итерации элемент в индексе 1 удаляется, а последний элемент сдвигается вниз по индексу 7. И так далее.
В какой-то момент цикла попытка удалить элемент для не существующего индекса приведет к сбою приложения.
При удалении элементов из массива в цикле наилучший способ сделать это - переместить его в обратном порядке:
for index in reverse(0..<myArray.count) {
myArray.removeAtIndex(index)
}
Это гарантирует, что удаленные элементы не изменят порядок или индекс элементов, которые еще предстоит обработать.
Если вы действительно хотите очистить массив, самый простой способ - переинициализировать его.
Вам не хватает ключевого слова in, которое вызывает вашу ошибку. Код должен быть:
for index in 1...myArray.count {
myArray.removeAtIndex(index)
}
Это, однако, не будет работать так, как вы ожидаете по нескольким причинам:
count - 1, который потребует 1..<myArray.countЕсли вы пытаетесь удалить все вещи из массива, вы должны сделать так, как предложили и использовали другие:
myArray.removeAll()
В том случае, если вы хотите только первый элемент, и больше ничего не можете получить ссылку на первый объект, очистите массив, а затем добавьте объект обратно:
var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
Ваш код должен работать, он просто не связан.
Swift 3
existingArray = []
При этом вы повторно назначаете пустой массив существующему массиву и указывается тип данных.
В качестве альтернативы вы можете использовать removeAll, который удаляет все элементы из массива и предоставляет возможность сохранить существующую емкость.
existingArray.removeAll()
Это функция mutating, которая означает, что массив, вызывающий метод, будет изменен (пуст).
Кайл на правильном пути, но его код не удастся, так как возможные индексы уменьшаются при перечислении, что приводит к незаконным индексам.
Один из способов решить это - перечислить назад. В быстрых случаях это делается с помощью шагов.
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
другие варианты: filter()
Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
Swift 2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
Существует метод removeAllObjects(), доступный в Swift 2
Syntax : public func removeAllObjects()
Eg.: mainArray.removeAllObjects
Чтобы удалить элемент при использовании определенного индекса:
Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)
Чтобы удалить последний элемент, используйте:
Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()
Чтобы удалить элементы в определенном диапазоне, используйте:
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)
Чтобы удалить использование определенного элемента:
Syntax : public func removeObject(anObject: AnyObject)
Ниже снимок экрана показывает список доступных методов в расширении NSMutableArray
Вы также можете сделать это:
for _ in myArray
{
myArray.removeAtIndex(0)
}
Вадиан имеет правильный ответ с точки зрения того, что вы пытаетесь выполнить. Проблема, указанная в результате вашего примера кода, связана с тем, как вы пытаетесь создать цикл for. Index будет начинаться с 0 по умолчанию. Добавление в диапазон значений после того, как это не правильный способ создания цикла for. Вот почему вы видите ошибку. Вместо этого создайте цикл for следующим образом:
for index in myArray.count {
// Do stuff
}
Надеюсь, этот ответ поможет другим, которые являются новыми для Swift или программирования.