gpt4 book ai didi

swift - 如何将数组转换为 Realm 中的列表?

转载 作者:行者123 更新时间:2023-12-05 01:07:29 24 4
gpt4 key购买 nike

在将 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 ?? []

我还尝试使用此扩展将列表类型更改为结果并将结果转换为 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 属性。

如果您关注 docs关于如何声明 List 类型的属性:

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

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

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

请注意,如果您确实想要一个 可选 列表属性(可以为 nil、空或有元素的属性),Realm 不支持。

关于swift - 如何将数组转换为 Realm 中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67380208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com