Ich habe ein ObservableObject in meiner DateView wie folgt deklariert :
import SwiftUI
class SelectedDate: ObservableObject {
@Published var selectedMonth: Date = Date()
var startDateOfMonth: Date {
let components = Calendar.current.dateComponents([.year, .month], from: self.selectedMonth)
let startOfMonth = Calendar.current.date(from: components)!
return startOfMonth
}
var endDateOfMonth: Date {
var components = Calendar.current.dateComponents([.year, .month], from: self.selectedMonth)
components.month = (components.month ?? 0) + 1
let endOfMonth = Calendar.current.date(from: components)!
return endOfMonth
}
}
struct DateView: View {
// other code
}
Ich kann in anderen Ansichten wie diesen auf startDateOfMonth und endDateOfMonth zugreifen:
Text("\(self.selectedDate.startDateOfMonth)")
Ich habe jedoch ein Problem, wenn ich versuche, diese Variablen aus ObservableObject in einem fetchRequest-Initialisierer in meiner TransactionsListView zu verwenden :
import SwiftUI
struct TransactionsListView: View {
@Environment(\.managedObjectContext) var managedObjectContext
var fetchRequest: FetchRequest<NPTransaction>
var transactions: FetchedResults<NPTransaction> { fetchRequest.wrappedValue }
@EnvironmentObject var selectedDate: SelectedDate
// other code
init() {
fetchRequest = FetchRequest<NPTransaction>(entity: NPTransaction.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \NPTransaction.date, ascending: false)
], predicate: NSPredicate(format: "date >= %@ AND date < %@", self.selectedDate.startDateOfMonth as NSDate, self.selectedDate.endDateOfMonth as NSDate))
}
var body: some View {
// other code
}
}
Ich erhalte eine Fehlermeldung:
Variable 'self.fetchRequest', die vor der Initialisierung verwendet wird
Was mache ich falsch? Ich habe versucht, diese Variablen in init ohne Selbst zu verwenden. Gleicher Fehler. Es funktionierte nur, wenn diese startDateOfMonth und endDateOfMonth nicht in ObservableObject waren, sondern als Variablen in der Vorfahrenansicht, die ich mit fetchRequest init als Parameter an meine Ansicht übergab. Aber ich habe nur wenige Ansichten wie diese und wollte ObservableObject verwenden, um nicht immer dieselben Parameter an Unteransichten zu übergeben.
Das Problem ist, dass Sie nicht @EnvironmentObjectin der verwenden können init(). Hier besteht die Möglichkeit, den EnvironmentObjectParameter as an die Ansicht zu übergeben. Verwenden Sie dann diesen Parameter in der Init. Hier ist der Konstruktor für die Ansicht, dann können Sie mit der lokalen Variablen auf start und endTime zugreifen selectedDate.
init(selectedDate : SelectedDate)
{
//now you can access selectedDate here and use it in FetchRequest
fetchRequest = FetchRequest<NPTransaction>(entity: NPTransaction.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \NPTransaction.date, ascending: false)], predicate: NSPredicate(format: "date >= %@ AND date < %@", selectedDate.startDateOfMonth as NSDate, selectedDate.endDateOfMonth as NSDate))
}
Wenn Sie diese Ansicht aufrufen, übergeben Sie den EnvironmentObjectParameter as.
//Declared as Environment Object
TransactionsListView(selectedDate : self.selectedDate)
Swift garantiert, dass alle Eigenschaften nach init initialisiert werden.
Wenn Sie auf die Objekteigenschaft zugreifen, wird davon ausgegangen, dass das Objekt bereits initialisiert ist. Dies ist nicht der Fall, wenn Sie in der Mitte des Init auf das Objekt zugreifen.
Wenn Sie initialisieren fetchRequest, greifen Sie auf self.selectedDateden Compiler zu (unabhängig davon, ob Sie self hinzufügen oder nicht), was darauf hindeutet, dass self initialisiert ist, was bedeutet, dass er fetchRequestals eine der Eigenschaften des self verwendet werden kann. Daher der Compilerfehler:
Variable 'self.fetchRequest', die vor der Initialisierung verwendet wird
Machen Sie fetchRequesteine berechnete oder faule Eigenschaft sollte funktionieren. (nicht allzu vertraut mit @FetchRequest)
Hoffe das hilft.
Sie können es als Parameter an die Ansicht übergeben:
import SwiftUI
struct TransactionsListView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest var transactions: FetchedResults<NPTransaction>
init(selectedDate: SelectedDate) {
_transactions = FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \NPTransaction.date, ascending: false)], predicate: NSPredicate(format: "date >= %@ AND date < %@", selectedDate.startDateOfMonth as NSDate, selectedDate.endDateOfMonth as NSDate))
}
var body: some View {
// other code
}
}
Speichern Sie das selectedDatewie @Statein der Übersicht und erstellen Sie das TransactionsListViewmit dem aktuellen Wert neu.
Jana Duggar äußerte sich offen zu ihrer Suche nach Liebe. Hier ist alles, was sie zu diesem Thema und ihrem fünfjährigen Zeitfenster für die Ehe gesagt hat.
„Outlander“-Star Sam Heughan verriet kürzlich, was er vom Set mitnehmen wird, um an Jamie Fraser zu erinnern, die Rolle, die ihn zum Star gemacht hat.
„She Loves You“ wurde in einer Stunde geschrieben, an einem Tag aufgenommen und war der Song der Beatles mit einem ihrer besten Auftritte in ihrer Karriere.
Dolly Parton und ihre Oma Bessie hatten eine besondere Beziehung. Oma Parton war sehr krank, aber das hielt Dolly nicht davon ab, ihr einen Streich zu spielen.
Man könnte meinen, Eiche oder Hickory seien robust, aber wenn es um die härtesten Hölzer der Welt geht, kommen sie nicht einmal annähernd heran.
Der Ozean ist voller Schönheit, birgt aber auch einige der furchterregendsten Meeresbewohner unseres Planeten. Viele dieser Tiere lauern tief unter der Meeresoberfläche, in der dunklen, von hohem Druck geprägten Tiefsee.
Wenn du gegen feindliche Monster kämpfst oder dich für PvP-Situationen ausrüstest, kann dir das Wissen um die besten Schwertverzauberungen in Minecraft einen entscheidenden Vorteil verschaffen. Durch das Verzaubern von Schwertern verursachst du mehr Schaden, erhältst mehr Beute von Monstern und verlängerst die Haltbarkeit deines Schwertes.
Wenn von sozialistischen Ländern die Rede ist, stellt man sich oft die vollständige Kontrolle durch den Staat und das Fehlen von Privateigentum vor. In der Praxis unterscheiden sich sozialistische Wirtschaftssysteme jedoch stark.
„Children“ hinterlässt einen Cameo-Auftritt eines großen Namens und einige verheerende Neuigkeiten
Dieser RAV4 soll sich in ausgezeichnetem Zustand befinden und ist bereit für eine Partie Reise nach Jerusalem.
Auf Drohnenaufnahmen ist zu sehen, dass die Feuerwehrleute offenbar Mühe haben, den Brand zu löschen.
„Eyes of Wakanda“ ist direkt mit dem MCU verknüpft und bietet Updates zu „X-Men ’97“, „What If...“, „Daredevil“ und mehr.
Ava Gardner war mit Mickey Rooney und Frank Sintra verheiratet und datete mehrere andere Hollywoodstars. Hier ist ein Rückblick auf Ava Gardners Dating-Geschichte.
John Cleese heiratete seine Frau Jennifer Wade im Jahr 2012. Hier erfahren Sie alles Wissenswerte über John Cleeses Frau Jennifer Wade.
Iman und David Bowie bekamen im Jahr 2000 ihre Tochter Alexandria „Lexi“ Jones. Hier erfahren Sie alles Wissenswerte über ihre Tochter Alexandria „Lexi“ Jones.
Walker Scobell ist ein US-amerikanischer Schauspieler. Hier finden Sie alles, was Sie über den Star aus „Percy Jackson und die Olympier“ wissen müssen.
Es fällt mir plötzlich auf, wie so oft. Es ist wieder die Mitte. <Nein, nicht die im Pazifik, du Schlappschwanz, die auf dem Jahrmarkt> Jede Schlagzeile laut…..
Im Jahr 2022, mit der Veröffentlichung von GPT-3, scheinen Schreibfähigkeiten an Bedeutung zu verlieren. Mit KI können auch Menschen mit schlechten Schreibkenntnissen hochwertiges Personal hervorbringen.
In der heutigen schnelllebigen und wettbewerbsintensiven Welt spielt die Karriere eine wichtige Rolle für das persönliche Wachstum, die finanzielle Stabilität und die allgemeine Lebenszufriedenheit. Viele Menschen befinden sich jedoch in einem unerbittlichen Kreislauf aus Stagnation und Unzufriedenheit, der ihr Berufsleben allmählich verkümmert.
Letzte Woche fiel mir eine Pressemitteilung auf, die über PressGazette (eine britische Nachrichten-Website für Medien) verschickt wurde. In dem Artikel wurde angekündigt, dass Acast, das skandinavische Podcast-Hosting- und Werbeunternehmen, ein Konsortium der „wahrscheinlich einflussreichsten“ Verlage im Podcasting leiten werde.