In meiner Anwendung habe ich beim Auswählen einer Zelle ein Objekt im Array hinzugefügt und beim erneuten Auswählen der Zelle die Auswahl aufgehoben und das Objekt entfernt. Ich habe diesen Code verwendet, aber mir einen Fehler gegeben.
extension Array {
func indexOfObject(object : AnyObject) -> NSInteger {
return (self as NSArray).indexOfObject(object)
}
mutating func removeObject(object : AnyObject) {
for var index = self.indexOfObject(object); index != NSNotFound; index = self.indexOfObject(object) {
self.removeAtIndex(index)
}
}
}
class MyViewController: UITableViewController {
var arrContacts: [Any] = []
var contacts: [Any] = []
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
arrContacts.removeObject(contacts[indexPath.row])
}
}
Es gibt mir 2 Fehler wie folgt:
C-style for statement has been removed in Swift 3
Value of type '[Any]' has no member 'removeObject'
Set<Contact>
ein Array anstelle eines Arrays verwenden. Können Sie weitere Informationen zu Ihrem Kontaktobjekt bereitstellen? Wenn Sie es selbst gemacht haben, müssen Sie es anpassenHashable
undEquatable
in ein Set setzenAntworten:
Das Swift-Äquivalent zu
NSMutableArray
'sremoveObject
ist:wenn die Objekte eindeutig sind . Es besteht überhaupt keine Notwendigkeit zum Gießen
NSArray
und VerwendenindexOfObject:
Die API
index(of:
funktioniert auch, dies führt jedoch zu einer unnötigen impliziten Umwandlung inNSArray
.Wenn es mehrere Vorkommen desselben Objekts gibt, verwenden Sie
filter
. In Fällen wie Datenquellen-Arrays, in denen ein Index einem bestimmten Objekt zugeordnetfirstIndex(of
ist, ist dies jedoch vorzuziehen, da er schneller als istfilter
.Aktualisieren:
In Swift 4.2 und höher können Sie ein oder mehrere Vorkommen entfernen
beta
mitremoveAll(where:)
:quelle
.index(of:
ist nur verfügbar, wenn die SammlungEquatable
Typen enthält .while let index = array.index(of: "beta") { array.remove(at: index) }
filter
Lösung. Aber wenn die Objekte einzigartig sind, verwenden Sie sie immer,index(of
weil sie viel performanter sind alsfilter
quelle
Für Swift 3 können Sie index (where :) verwenden und einen Abschluss einfügen, der den Vergleich eines Objekts im Array ($ 0) mit dem gewünschten Objekt durchführt.
quelle
Eine andere nette und nützliche Lösung besteht darin, diese Art von Erweiterung zu erstellen:
Auf diese Weise, wenn Sie Ihr Array mit benutzerdefinierten Objekten haben:
quelle
remove(element: Element)
dass Sie in Array auch Typen wie Int, Double speichern können - sie sind keine Objekte.Verwenden Sie in Swift 5 Folgendes
Extension
:Beispiel:
Verwenden Sie in Swift 3 Folgendes
Extension
:Beispiel:
quelle
for var index = self.indexOfObject(object); index != NSNotFound; index = self.indexOfObject(object)
ist für Schleife im C-Stil und wurde entferntÄndern Sie Ihren Code in etwa so, um alle ähnlichen Objekte zu entfernen, wenn sie eine Schleife durchlaufen haben:
quelle
Swift 4
quelle
Die richtige und funktionierende einzeilige Lösung zum Löschen eines eindeutigen Objekts (mit dem Namen "objectToRemove") aus einem Array dieser Objekte (mit dem Namen "array") in Swift 3 lautet:
quelle
Versuchen Sie dies in Swift 3
Anstatt
Aktualisieren
Stellen Sie sicher, dass sich das Objekt im Gültigkeitsbereich befindet. Sie können den Bereich "intern" angeben, was standardmäßig der Fall ist.
index(of:<Object>)
um zu arbeiten, sollte die Klasse konform seinEquatable
quelle
In Swift 3 und 4
Ab Swift 4.2 können Sie einen fortgeschritteneren Ansatz verwenden (schneller und speichereffizienter).
anstatt
Lesen Sie hier mehr
quelle
Erweiterung für Array, um dies einfach zu machen und Verkettung für Swift 4.2 und höher zu ermöglichen:
quelle
Dies ist die offizielle Antwort, um den Index eines bestimmten Objekts zu finden. Anschließend können Sie jedes Objekt mithilfe dieses Index leicht entfernen:
Hier ist der Link: https://developer.apple.com/documentation/swift/array/2994720-firstindex
quelle
Das habe ich benutzt (Swift 5) ...
Ergebnisse:
Wichtig: Das Array, aus dem Sie Elemente entfernen, muss gleichwertige Elemente enthalten (z. B. Objekte, Zeichenfolgen, Zahlen usw.).
quelle