如何防止向列表中添加重复项RealmSwift
?
我有我的User
作为领域对象,但真正的数据源是服务器(只是使用领域在本地缓存用户)。当我从服务器获取当前用户数据时,我想确保存储在领域中的用户拥有来自服务器的所有播放列表(以及它们的曲目列表等)。我担心如果我从服务器循环这些列表,附加到myUser.playlists
,我最终可能会多次将相同的播放列表添加到用户的播放列表列表中。
class User: Object {
dynamic var name = ""
dynamic var id = ""
let playlists = List<Playlist>()
override class func primaryKey() -> String {
return "id"
}
}
class Playlist: Object {
dynamic var name = ""
dynamic var id = ""
let tracks = List<Song>()
override class func primaryKey() -> String {
return "id"
}
}
class Song: Object {
dynamic var title = ""
let artists = List<Artist>()
dynamic var id = ""
override class func primaryKey() -> String {
return "id"
}
}
class Artist: Object {
dynamic var name = ""
dynamic var id = ""
override class func primaryKey() -> String {
return "id"
}
}
这取决于来自服务器的数据类型。如果整个播放列表数据总是出现(您始终可以替换现有的播放列表数据),您可以将列表删除为空,然后追加它们。
realm.write {
user.playlists.removeAll() // empty playlists before adding
for playlistData in allPlaylistData {
let playlist = Playlist()
...
user.playlists.append(playlist)
}
}
如果来自服务器的数据存在差异(也有一些是重复的),则必须检查该数据是否已经存在。
realm.write {
for playlistData in allPlaylistData {
let playlist = Playlist()
...
realm.add(playlist, update: true) // Must add to Realm before check
guard let index = user.playlists.indexOf(playlist) else {
// Nothing to do if exists
continue
}
user.playlists.append(playlist)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)