【问题标题】:Remove Item from Struct (Swift)从结构中删除项目(Swift)
【发布时间】:2017-12-06 17:21:11
【问题描述】:

我有一个结构

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] = [

];

通过按下UIButton,一个对象被添加到结构中

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

但是,我想要另一个 UIButton 从结构中删除对象。像这样的:

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

我正在使用UITableView 来显示信息。我该怎么做?

【问题讨论】:

  • 删除哪个元素?您没有提到应用程序扩展时它将如何工作。您为单个结构解释它的示例,但您要删除哪个元素。你有这些的集合视图或表格视图吗??添加更多细节!
  • 当您将喜爱的歌曲存储在Array 中时。因此,您要么必须记住[store] 存储歌曲的index,然后可以通过索引将其删除。另一种选择是通过title将其存储在Dictionary中,然后您可以通过title键删除fvrt歌曲。
  • 你可以让FavoriteSong符合协议Equatable,然后使用==操作符遍历数组以找到歌曲的潜在索引,如果找到,将其从数组中删除。
  • 更多细节,这首歌?歌曲?

标签: ios swift struct uibutton


【解决方案1】:

找到对象的index 并将其删除,它与您的歌曲titleartist 匹配

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

【讨论】:

    【解决方案2】:
    struct FavoriteSong : Equatable{
    
    public static func ==(lhs: FavoriteSong, rhs: FavoriteSong) -> Bool {
        return lhs.title == rhs.title &&
                lhs.artist == rhs.artist
      }
    }
    

    您必须将扩展名添加到Array 才能使用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)
        }
      }
    }
    

    然后你可以使用这样的东西

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多