如何将数组转换为 Realm 中的列表?
How to convert an array to List in Realm?
我在将 jsonData 写入 Realm 时,将 Realm 类型 List < Int> 数组转换为 Int 数组 [Int] 时遇到问题。
struct Movies: Codable {
let genreIDs: [Int]?
}
class CachedMovies: Object {
let genreIDs: List<Int>?
}
func saveMovies(movies:[Movies]) {
do {
let realm = try! Realm()
try realm.write {
movies.forEach { (movie) in
let movieRealm = CachedMovies()
movieRealm.id = movie.id ?? 0
movieRealm.title = movie.title ?? ""
movieRealm.genreIDs = movie.genreIDs ?? [] // here's error: Cannot assign value of type '[Int]?' to type 'List<Int>?'
realm.add(movieRealm, update: .modified)
}
}
}
我试过了,但是数组变空了
var newArr = Array(movieRealm.genreIDs)
newArr = movie.genreIDs ?? []
我还尝试使用此扩展将 List 类型更改为 Results 并将 Results 转换为 Int,但它不起作用。
extension Results {
func toArray<T>(type: T.Type) -> [T] {
return compactMap { [=12=] as ? T }
}
}
请问如何正确分配数组?
请注意,您的问题不是将 List
转换为数组,而是将数组转换为 List
。您已经知道如何执行前者:Array(someList)
,但是由于您将数组 (movie.genreIDs ?? []
) 分配给 List
属性 (movieRealm.genreIDs
),您需要将数组转换为 List
.
但是等等! movieRealm.genreIDs
是一个 let
常量,因此您无论如何都不能分配给它。您真正的问题是您没有正确声明 genreIDs
属性。
如果您按照 docs 如何声明 List
类型的 属性:
class CachedMovies: Object {
// genreIDs should not be optional
let genreIDs = List<Int>()
}
您会发现不需要将数组转换为 List
。您可以将数组的内容添加到 List
,因为列表不是 nil:
movieRealm.genreIDs.append(objectsIn: move.genreIDs ?? [])
请注意,如果您确实想要一个 optional 列表 属性(一个 属性 可以是 nil、空或有元素),Realm 不会'支持。
我在将 jsonData 写入 Realm 时,将 Realm 类型 List < Int> 数组转换为 Int 数组 [Int] 时遇到问题。
struct Movies: Codable {
let genreIDs: [Int]?
}
class CachedMovies: Object {
let genreIDs: List<Int>?
}
func saveMovies(movies:[Movies]) {
do {
let realm = try! Realm()
try realm.write {
movies.forEach { (movie) in
let movieRealm = CachedMovies()
movieRealm.id = movie.id ?? 0
movieRealm.title = movie.title ?? ""
movieRealm.genreIDs = movie.genreIDs ?? [] // here's error: Cannot assign value of type '[Int]?' to type 'List<Int>?'
realm.add(movieRealm, update: .modified)
}
}
}
我试过了,但是数组变空了
var newArr = Array(movieRealm.genreIDs)
newArr = movie.genreIDs ?? []
我还尝试使用此扩展将 List 类型更改为 Results 并将 Results 转换为 Int,但它不起作用。
extension Results {
func toArray<T>(type: T.Type) -> [T] {
return compactMap { [=12=] as ? T }
}
}
请问如何正确分配数组?
请注意,您的问题不是将 List
转换为数组,而是将数组转换为 List
。您已经知道如何执行前者:Array(someList)
,但是由于您将数组 (movie.genreIDs ?? []
) 分配给 List
属性 (movieRealm.genreIDs
),您需要将数组转换为 List
.
但是等等! movieRealm.genreIDs
是一个 let
常量,因此您无论如何都不能分配给它。您真正的问题是您没有正确声明 genreIDs
属性。
如果您按照 docs 如何声明 List
类型的 属性:
class CachedMovies: Object {
// genreIDs should not be optional
let genreIDs = List<Int>()
}
您会发现不需要将数组转换为 List
。您可以将数组的内容添加到 List
,因为列表不是 nil:
movieRealm.genreIDs.append(objectsIn: move.genreIDs ?? [])
请注意,如果您确实想要一个 optional 列表 属性(一个 属性 可以是 nil、空或有元素),Realm 不会'支持。