2017-07-03 5 views
0

ich eine Struktur habenArtikel von Struct (Swift)

struct FavoriteSong { 

    var title: String 
    var artist: String 

    init(title : String, artist : String) { 
     self.title = title 
     self.artist = artist 
    } 

    init?(dictionary : [String:String]) { 
     guard let title = dictionary["title"], 
      let artist = dictionary["artist"] else { return nil } 
     self.init(title: title, artist: artist) 
    } 

    var propertyListRepresentation : [String:String] { 
     return ["title" : title, "artist" : artist] 
    } 
} 


var favoriteSongs: [FavoriteSong] = [ 

]; 

Durch eine UIButton Pressen wird ein Objekt in der Struktur hinzugefügt

favoriteSongs.append(FavoriteSong(title: songs[thisSong].title, artist: songs[thisSong].artist)) 

Aber ich einen anderen UIButton wollen, der das Objekt entfernt von der Struktur. Etwas wie dieses:

favoriteSongs.remove(FavoriteSong(title: songs[thisSong].title, artist: songs[thisSong].artist)) 

Ich verwende ein UITableView, um die Informationen anzuzeigen. Wie würde ich das tun?

+0

Welches Element entfernen? Sie haben nicht erwähnt, wie es funktioniert, wenn die App skaliert. In dem Beispiel haben Sie es für eine einzelne Struktur erklärt, aber welches Element möchten Sie entfernen. Haben Sie eine Sammlungsansicht oder eine Tabellenansicht davon? Fügen Sie weitere Details hinzu! –

+0

Wie Sie die Lieblingssongs in einem 'Array' speichern. Sie müssen sich also entweder den 'Index' merken, in dem der Song gespeichert wurde, und dann können Sie ihn nach Index entfernen. Eine andere Option ist, es in 'Dictionary' mit' title' zu ​​speichern und dann können Sie den fvrt Song mit 'title' Taste löschen. –

+1

Sie können 'FavoriteSong' dem Protokoll' Equatable' anpassen und dann durch das Array laufen, um den potentiellen Index des Liedes zu finden, indem Sie den Operator '== verwenden, falls er gefunden wird, entfernen Sie ihn aus dem Array. – Sajjon

Antwort

0

die index des Objekts Suchen und entfernen Sie es, die Ihren Song passt title und artist

let index = favoriteSongs.index{ $0.title == songs[thisSong].title && $0.artist == songs[thisSong].artist} 
if let index = index { 
    favoriteSongs.remove(at: index) 
} 
0
struct FavoriteSong : Equatable{ 

public static func ==(lhs: FavoriteSong, rhs: FavoriteSong) -> Bool { 
    return lhs.title == rhs.title && 
      lhs.artist == rhs.artist 
    } 
} 

Sie haben Erweiterungsobjekt zu löschen, um Array hinzufügen mit Equatable

extension Array where Element: Equatable { 

// Remove first collection element that is equal to the given `object`: 
mutating func remove(object: Element) { 
    if let index = index(of: object) { 
     remove(at: index) 
    } 
    } 
} 

Und dann können Sie etwas wie dieses

verwenden
favoriteSongs.remove(FavoriteSong(title: songs[thisSong].title, artist: songs[thisSong].artist))