Mic*_*ael 6 realm ios swift realm-list
如何防止在列表中添加重复项RealmSwift?
我将我User作为领域对象,但真正的数据源是服务器(只需使用Realm本地缓存用户).当我从服务器获取当前用户数据时,我想确保我在realm中存储的用户具有来自服务器的所有播放列表(以及它们与轨道列表等同步).我很担心如果我从服务器上循环遍历那些列表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"
}
}
Run Code Online (Sandbox Code Playgroud)
kis*_*umi 12
这取决于来自服务器的数据类型.如果始终显示整个播放列表数据(您始终可以替换现有的播放列表数据),则可以将列表删除为空,然后附加它们.
realm.write {
user.playlists.removeAll() // empty playlists before adding
for playlistData in allPlaylistData {
let playlist = Playlist()
...
user.playlists.append(playlist)
}
}
Run Code Online (Sandbox Code Playgroud)
如果来自服务器的差异数据(也有一些是重复的),则必须检查数据是否已存在.
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)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |