如何在Realm中将数组转换为List



我在转换Realm类型时遇到问题List<Int>数组到Int数组[Int]在将jsonData写入Realm时。

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 { $0 as ? T }
}
}

你能帮我如何正确分配数组吗?

请注意,您的问题不是将List转换为数组,而是将数组转换为List。您已经知道如何执行前者:Array(someList),但由于要将数组(movie.genreIDs ?? [](分配给List属性(movieRealm.genreIDs(,因此需要将数组转换为List

但是等一下!movieRealm.genreIDs是一个let常量,所以无论如何都不能赋值给它。真正的问题是您没有正确地声明genreIDs属性。

如果您遵循有关如何声明List类型的属性的文档:

class CachedMovies: Object {
// genreIDs should not be optional
let genreIDs = List<Int>()
}

您将看到您不需要将数组转换为List。您可以将数组的内容添加到List中,因为列表不是nil:

movieRealm.genreIDs.append(objectsIn: move.genreIDs ?? [])

请注意,如果你真的想要一个可选的列表属性(一个可以为零、空或有元素的属性(,Realm不支持。

BTW如果您的目的实际上是将数组转换为领域列表:

let yourList = List()
yourList.append(objectsIn: /* your array here */)
let swiftList = [Date(), Date(), Date()]
let realmList = List<Date>()
realmlist.append(objectsIn: swiftList)

启动领域列表对象时需要使用显式数据类型。

最新更新