Відповіді:
Існує метод (власне функція)
myArray.removeAll()
structs, і структури мають functionsвідміну від класів, які мають methods.
Arrays є structs. Тут ветеран-об'єктив-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).
Ваш код повинен працювати, він просто не зв'язаний.
Швидкий 3
existingArray = []
Роблячи це, ви повторно присвоюєте порожній масив існуючому масиву, і тип даних передається.
Крім того, ви можете використовувати, removeAllщо видаляє всі елементи з масиву і надає можливість зберегти існуючу ємність.
existingArray.removeAll()
Це mutatingфункція, яка означає, що масив, що викликає метод, буде змінений (порожній).
Кайл стоїть на правильному шляху, але його код вийде з ладу, оскільки можливі індекси зменшуються під час перерахунку, що призводить до незаконних індексів.
Один із способів вирішити це - перерахувати назад. Швидко це робиться за допомогою кроків .
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
інший варіант буде використовувати filter()
Швидкий 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
Швидкий 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 index in myArray.indices {
// Do stuff
}
Сподіваємось, ця відповідь допоможе іншим, хто не знайомий із Swift чи програмуванням.
Для видалення всіх елементів масиву
var array = [1,2,3,4,5,6]()
array.removeAll()