Ответы:
Есть метод (фактически функция)
myArray.removeAll()
structs, а в структурах есть functionsклассы, которые не имеют methods.
Arrays are structs. Ветеран Objective-C здесь ...
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)
}
Это гарантирует, что удаленные элементы не изменят порядок или индекс элементов, которые еще предстоит обработать.
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }предпочтительно использую не всю одну строку, но этот код должен компилироваться в одну строку
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }? Я пока не очень хорошо разбираюсь в эффективности, но в этом случае вам не нужно менять диапазон, так что, возможно, это быстрее.
Вам не хватает 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)
count - 1).
Ваш код должен работать, он просто выходит за рамки.
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
}
stride
В Swift 2 есть метод removeAllObjects ()
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.indices {
// Do stuff
}
Надеюсь, этот ответ поможет другим, кто плохо знаком с Swift или программированием.
Для удаления всех элементов массива
var array = [1,2,3,4,5,6]()
array.removeAll()