我在Xcode中遇到错误:
参数类型为“日期?”与预期类型不符 “ ReferenceConvertible”
此错误是什么意思?以及如何解决?
示例:
我在核心数据中有一个实体,名称为ToDoItem(代码生成:类定义和模块:当前产品模块),并设置了2个属性:
Xcode为我自动生成的类:
import Foundation
import CoreData
public class ToDoItem: NSManagedObject {
}
在ContentView中,我有以下代码将todoItem传递给EditItemView:
ForEach(toDoItems, id: \.self) {todoItem in
NavigationLink(destination: EditItemView(todoItem: todoItem)) {
ToDoItemView(title: todoItem.title ?? "", createdAt: todoItem.createdAt ?? Date())
}
在EditItemView中,我在此行得到错误:
Text("\(todoItem.createdAt, formatter: Self.dateFormat)")
如果使用,我可以使此错误消失:
Text("\(todoItem.createdAt!, formatter: Self.dateFormat)")
但是...即使在构建应用程序时也没有错误,在我使用应用程序中的“删除”按钮删除todoItem之后,该应用程序在同一行上崩溃并出现错误:
线程1:致命错误:展开包装时意外发现nil 可选值
我只是在学习,到目前为止,我知道这与某些值在Swift中是可选的有关,即使它们在Core Data中不是可选的。我读了用!展开可选值。大多数时候应该避免。但是,我仍然不知道如何解决此问题。如果todoItem.createdAt不起作用并且todoItem.createdAt如何使用todoItem.createdAt!使应用程序崩溃。
答案 0 :(得分:1)
无条件强制打开包装是件坏事,实际上您现在知道为什么,请始终避免使用...
这是该崩溃的可能修补程序之一:
Text(todoItem.createdAt != nil ? "\(todoItem.createdAt!, formatter: Self.dateFormat)" : "")