Kesalahan: Argumen mengetik 'Tanggal?' tidak sesuai dengan tipe yang diharapkan 'ReferenceConvertible'

Saya mendapatkan kesalahan di Xcode:

Jenis argumen 'Tanggal?' tidak sesuai dengan tipe yang diharapkan 'ReferenceConvertible'

Apa arti kesalahan ini? Dan bagaimana cara memperbaikinya?

CONTOH:

Saya memiliki Entitas dalam Data Inti dengan nama ToDoItem (Codegen: Definisi Kelas dan Modul: Modul Produk Saat Ini) dan menetapkan 2 atribut:

  1. createAt - BUKAN opsional, nilai default: tanggal sekarang
  2. title - BUKAN opsional, nilai default: string kosong

Xcode secara otomatis membuat kelas untuk saya:

import Foundation
import CoreData


public class ToDoItem: NSManagedObject {

}

Di ContentView saya memiliki kode ini tempat saya meneruskan todoItem ke EditItemView:

ForEach(toDoItems, id: \.self) {todoItem in

    NavigationLink(destination: EditItemView(todoItem: todoItem)) {

        ToDoItemView(title: todoItem.title ?? "", createdAt: todoItem.createdAt ?? Date())
}

Dan di EditItemView saya mendapatkan kesalahan pada baris ini:

Text("\(todoItem.createdAt, formatter: Self.dateFormat)")

Saya dapat menghilangkan kesalahan ini jika saya menggunakan:

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

Tapi... bahkan sekarang tidak ada kesalahan saat membuat aplikasi, setelah saya menghapus todoItem menggunakan tombol Hapus di aplikasi saya, aplikasi mogok tepat di baris yang sama dengan kesalahan:

Thread 1: Kesalahan fatal: Tiba-tiba ditemukan nil saat membuka bungkus nilai Opsional

Saya baru belajar dan sejauh ini saya tahu ini terkait dengan beberapa nilai yang bersifat opsional di Swift meskipun itu bukan opsional di Data Inti. Dan saya membaca nilai opsional yang terbuka dengan ! harus dihindari sebagian besar waktu. Tapi tetap saja, saya tidak tahu bagaimana cara memperbaiki masalah ini. Cara menggunakan todoItem.createdAt jika todoItem.createdAt tidak berfungsi dan todoItem.createdAt! membuat aplikasi mogok.


person mallow    schedule 06.12.2019    source sumber


Jawaban (1)


Membuka paksa tanpa syarat adalah hal yang buruk, sebenarnya Anda sekarang tahu alasannya, cobalah untuk selalu menghindarinya...

Berikut adalah salah satu kemungkinan perbaikan untuk kerusakan tersebut:

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