错误:参数类型为“日期?”不符合预期的类型'ReferenceConvertible'

时间:2019-12-06 06:36:46

标签: ios core-data swiftui

我在Xcode中遇到错误:

  

参数类型为“日期?”与预期类型不符   “ ReferenceConvertible”

此错误是什么意思?以及如何解决?

示例:

我在核心数据中有一个实体,名称为ToDoItem(代码生成:类定义和模块:当前产品模块),并设置了2个属性:

  1. createdAt-非可选,默认值:当前日期
  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!使应用程序崩溃。

1 个答案:

答案 0 :(得分:1)

无条件强制打开包装是件坏事,实际上您现在知道为什么,请始终避免使用...

这是该崩溃的可能修补程序之一:

Text(todoItem.createdAt != nil ? "\(todoItem.createdAt!, formatter: Self.dateFormat)" : "")