我在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/