Retrait de l'objet à partir du tableau de Swift 3
Dans mon application, j'ai ajouté un objet dans le tableau lorsque vous sélectionnez la cellule et désélectionner et de supprimer l'objet lors de la re-sélectionnez la cellule. J'ai utilisé ce code mais donnez-moi de l'erreur.
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])
}
}
Il me donne 2 erreur comme ça:
C-style for statement has been removed in Swift 3
Value of type '[Any]' has no member 'removeObject'
- Vous pouvez utiliser un
Set<Contact>
plutôt qu'un Tableau. Pouvez-vous fournir plus d'informations à propos de votre contact de l'objet? Si vous l'avez fait vous-même, vous aurez besoin de se conformer auxHashable
etEquatable
afin de le mettre dans un ensemble
Vous devez vous connecter pour publier un commentaire.
La Swift (3) équivalent à
NSMutableArray
'sremoveObject
est:si les objets sont uniques. Il n'est pas nécessaire à tous les cast vers
NSArray
et l'utilisationindexOfObject:
S'il y a plusieurs occurrences d'un même objet l'utilisation
filter
. Toutefois, dans des cas comme source de données tableaux où un index est associé à un objet particulierindex(of
est préférable car il est plus rapide quefilter
.Mise à jour:
Dans Swift 4.2+, vous pouvez supprimer un ou plusieurs occurrences de
beta
avecremoveAll(où:)
:.index(of:
est disponible uniquement si la collection contientEquatable
types.while let index = array.index(of: "beta") { array.remove(at: index) }
filter
solution. Mais si les objets sont à utilisation unique toujoursindex(of
parce qu'il est beaucoup plus performant quefilter
Pour Swift 3, vous pouvez utiliser l'index(où:) et comprennent une fermeture qui ne la comparaison d'un objet dans le tableau ($0) avec tout ce que vous cherchez.
Une autre belle et utile, la solution est de créer ce genre d'extension:
De cette façon, si vous avez votre tableau avec des objets personnalisés:
remove(element: Element)
parce que dans la gamme, vous pouvez stocker également des types comme Int, Double - ils ne sont pas des objets.for var index = self.indexOfObject(object); index != NSNotFound; index = self.indexOfObject(object)
est pour la boucle dans C-style et a été suppriméModifier votre code pour quelque chose comme cela pour enlever tout objet similaire ou si elle a une boucle:
Dans Swift 3, Utilisez ce
Extension
:exemple:
Swift 4
Le bon de travail et une solution en ligne pour la suppression d'un objet unique (nommé "objectToRemove") à partir d'un tableau de ces objets (nommé "tableau") dans Swift 3 est:
Essayer dans la Swift 3
Au lieu de
Mise à jour
Assurez-vous que l'objet est dans le champ. Vous pouvez donner de l'envergure "interne", qui est par défaut.
index(of:<Object>)
de travail, la classe doit être conforme àEquatable
Extension pour le tableau de le faire facilement et permettent de chaînage:
Dans Swift 3 et 4
De Swift 4.2 vous pouvez utiliser plus avancés approche(plus rapide et efficace en terme de mémoire)
au lieu de
Lire plus ici