Добавьте последний элемент в массив из цикла for

#ios #arrays #swift #for-loop

#iOS #массивы #swift #for-цикл

Вопрос:

У меня есть такой код…

 for element in self.arr_Offline {
   self.arr_OfflineTemp.add(element)
   break
}
self.arr_Offline.removeObject(at: 0)
 

Здесь я перебираю вызываемый массив self.arr_Offline , добавляю первый элемент из этого массива в другой вызываемый массив self.arr_OfflineTemp и немедленно выполняю break, чтобы во втором массиве был только один элемент, а затем, как только я выхожу из цикла for, я удаляю добавленный объект из основного массива, выполнив self.arr_Offline.removeObject(at: 0)

Но я хочу добавить последний элемент self.arr_OfflineTemp вместо первого, а затем удалить этот последний элемент из self.arr_Offline . Это должно выглядеть примерно так…

 for element in self.arr_Offline { // looping through array
   self.arr_OfflineTemp.add(lastElementOf'self.arr_Offline') //add last element
   break
}
self.arr_Offline.removeObject(at: 'last') //remove that last element that was added to `arr_OfflineTemp`
 

Как я могу этого добиться ..?

Ответ №1:

Прежде всего, никогда не используйте NS(Mutable)Array and NS(Mutable)Dictionary в Swift.

Собственный Swift Array имеет удобный способ сделать это без цикла

Первый элемент:

 if !arr_Offline.isEmpty { // the check is necessary to avoid a crash
    let removedElement = self.arr_Offline.removeFirst()
    self.arr_OfflineTemp.append(removedElement)
}
 

Последний элемент:

 if !arr_Offline.isEmpty {
    let removedElement = self.arr_Offline.removeLast()
    self.arr_OfflineTemp.append(removedElement)
}
 

И, пожалуйста, отбросьте ненужные имена snake_case в пользу camelCase

Ответ №2:

Вы пробовали тот же подход с reversed() Swift:

 for i in arr.reversed():
   // your code logic
 

После добавления элемента вы можете удалить последний элемент из списка, используя это:

 lst.popLast() or lst.removeLast()
 

Попробуйте это для приведенного выше кода:

 for element in self.arr_Offline.reversed() {
   self.arr_OfflineTemp.add(element)
   break
}
self.arr_Offline.popLast()
 

Это то, что вы ищете?

Комментарии:

1. хорошо @Priyanshu Tiwari. то есть вы имеете в виду, что я могу сделать for element in self.arr_Offline.reversed { .. } .. но как мне это сделать lst.pop() or del lst[-1] ..?..

2. в swift нет метода с именем pop

3. используйте popLast() или removeLast()

4. для элемента в self.arr_Offline.reversed() { self.arr_OfflineTemp.add(element) break } self.arr_Offline.popLast()