在我的中,我声明了一个ObservableObject对象,代码如下:
我可以在其他视图中像这样访问startDateOfMonth和endDateOfMonth:
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
}
我可以在其他视图中像这样访问startDateOfMonth和endDateOfMonth:
Text("\(self.selectedDate.startDateOfMonth)")
但是当我试图在我的 TransactionsListView 中的fetchRequest初始化器中使用ObservableObject中的那些变量时,遇到了一个问题:
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
}
}
我遇到了一个错误:
变量“self.fetchRequest”在初始化之前被使用
我做错了什么?我已经尝试在init中使用这些变量而不使用self。还是出现了同样的错误。唯一可行的方法是将startDateOfMonth和endDateOfMonth不作为ObservableObject,而是作为祖先视图中的vars传递给我的视图,并在fetchRequest init中使用它们作为参数。但是我有几个像这样的视图,并且希望使用ObservableObject,而不是一直将相同的参数传递给子视图。
selectedDate
吗? - AsperiselectedDate
在另一个视图(DateView)中的class SelectedDate: ObservableObject {...}
中声明。我尝试在 TransactionsListView 中使用它,其中我有 fetchRequest init。我不能在 init 中使用它,但是我可以在 body 中使用它,例如Text("\(self.selectedDate.startDateOfMonth)")
,没有问题。 我已经更新了我的问题,并提供了更多细节。 - mallow