Сравните CoreData с сегодняшней датой - PullRequest
1 голос
/ 05 января 2020

Я пытаюсь скрыть текст «Скрыть меня» в представлении содержимого при наличии записи CoreData с атрибутом «Дата создания» (дата), который соответствует текущей дате.

DiaryItem.swift

public class DiaryItem:NSManagedObject,Identifiable {
    @NSManaged public var createdAt:Date?
    @NSManaged public var title:String?
}

extension DiaryItem {
    static func getAllDiaryItems() -> NSFetchRequest<DiaryItem> {
       let request:NSFetchRequest<DiaryItem> = DiaryItem.fetchRequest() as!       NSFetchRequest<DiaryItem>

    let sortDescriptor = NSSortDescriptor(key: "createdAt", ascending: true)

    request.sortDescriptors = [sortDescriptor]

    return request
    }
}

Упрощенный ContentView.swift

import SwiftUI
import CoreData

struct ContentView: View {

@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(entity: DiaryItem.entity(), sortDescriptors: [
    NSSortDescriptor(keyPath: \DiaryItem.createdAt, ascending: false),
]) var diaryItems : FetchedResults<DiaryItem>

@State var show = false
@State private var showEntry: Bool = false

var body: some View {

        VStack {

            Text("Hide me!")

            List{

                ForEach(self.diaryItems) { diaryItem in

                    DiaryItemView(
                        title: diaryItem.title!,
                        createdAt: "\(diaryItem.createdAt!)",
                        diaryItem: diaryItem
                    )
                }
            }
        }
    }
}

Я знаю, что могу сравнить две даты как показано ниже:

var first = Date()  

let isToday = Calendar.current.isDateInToday(first)

Как проверить, создал ли пользователь запись CoreData с датой CreatedAt, совпадающей с текущим днем, и скрыть текст «Скрыть меня», если это так?

Спасибо за чтение, любая помощь будет потрясающей!

1 Ответ

1 голос
/ 05 января 2020

Если вы замените Text("Hide me") на следующее, текст должен подавляться, если первый элемент в вашем списке (ie. Самый последний, поскольку у вас есть ascending: false) присутствует сегодня:

if (diaryItems.first == nil || Calendar.current.isDateInToday(diaryItems.first!.createdAt!)) {
    Text("Hide me!")
    }

Вещи станут более сложными, если в будущем могут появиться некоторые дневники createdAt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...