Я пытаюсь удалить все элементы массива с помощью цикла 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 или программирования.