我在iOS应用中使用Core Data,并执行以下Swift代码,导致第二行出现错误:

let movies = (try? container.newBackgroundContext().fetch(request)) ?? []
return movies.map { $0.name! } // error: unexpectedly found nil while unwrapping...


请注意,在上面的示例中,可以100%确定movies中没有实体,而nil中没有name。 “核心数据”模型中的相应属性设置为非可选。

当我如下所示更改代码时(即不内联newBackgroundContext()),没有错误:

let context = container.newBackgroundContext()
let movies = (try? context.fetch(request)) ?? []
return movies.map { $0.name! } // no error this time


我对Swift还是很陌生,并假设它与内存管理有关(例如context被过早地取消了),但是我很欣赏关于为什么在第一个代码清单中出现错误的实际解释。

最佳答案

每当在数组上运行map函数时,它都会返回一个可选值。似乎名称没有价值,您正在强制展开。尝试使用compactMap。

movies.compactMap { $0.name }

关于swift - 在实体数组上“映射”时获取零值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58025461/

10-12 04:11