Відповіді:
Існує метод (власне функція)
myArray.removeAll()
struct
s, і структури мають functions
відміну від класів, які мають methods
.
Array
s є struct
s. Тут ветеран-об'єктив-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()