arrays - diccionarios - for en swift
Eliminar objeto especĂfico de la matriz en swift 3 (3)
Según su código, la mejora podría ser así:
if let index = arrPickerData.index(where: { $0.tag == pickerViewTag }) {
arrPickerData.remove(at: index)
//continue do: arrPickerData.append(...)
}
El índice existente significa que la matriz contiene el objeto con esa etiqueta.
Tengo un problema al intentar eliminar un objeto específico de una matriz en Swift 3. Quiero eliminar un elemento de una matriz como en la captura de pantalla, pero no conozco la solución.
Si tiene alguna solución, por favor comparta conmigo.
Utilicé las soluciones que se proporcionan aquí: Eliminar elemento de matriz específica, igual a cadena - Swift Ask Question
Esta es una de las soluciones allí (en caso de que el objeto fuera una cadena):
myArrayOfStrings = ["Hello","Playground","World"]
myArrayOfStrings = myArrayOfStrings.filter{$0 != "Hello"}
print(myArrayOfStrings) // "[Playground, World]"
Respuesta corta
puede encontrar el índice del objeto en la matriz y luego eliminarlo con el índice.
var array = [1, 2, 3, 4, 5, 6, 7]
var itemToRemove = 4
if let index = array.index(of: itemToRemove) {
array.remove(at: index)
}
Respuesta larga
Si los elementos de su matriz confirman el protocolo Hashable, puede usar
array.index(of: itemToRemove)
porque Swift puede encontrar el índice al verificar el valor de hashValue de los elementos de la matriz.
pero si sus elementos no confirman el protocolo Hashable o si no desea encontrar la base del índice en hashValue, debe indicar al método de índice cómo encontrar el elemento. así que usa el índice (donde:) en lugar de eso, le pide que proporcione un indicador de predicado para encontrar el elemento correcto
// just a struct which doesn''t confirm to Hashable
struct Item {
let value: Int
}
// item that needs to be removed from array
let itemToRemove = Item(value: 4)
// finding index using index(where:) method
if let index = array.index(where: { $0.value == itemToRemove.value }) {
// removing item
array.remove(at: index)
}
Si está utilizando el método de índice (donde :) en muchos lugares, puede definir una función de predicado y pasarla al índice (donde :)
// predicate function for items
func itemPredicate(item: Item) -> Bool {
return item.value == itemToRemove.value
}
if let index = array.index(where: itemPredicate) {
array.remove(at: index)
}
Para obtener más información, lea los documentos para desarrolladores de Apple: