ฉันมี ObservableObject ที่ประกาศเช่นนี้ในDateViewของฉัน:
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)")
แต่ฉันมีปัญหาเมื่อพยายามใช้ตัวแปรเหล่านั้นจาก ObservableObject ภายในตัวเริ่มต้น fetchRequest ในTransactionsListViewของฉัน:
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 โดยไม่ต้องใช้ตัวเอง ข้อผิดพลาดเดียวกัน วิธีเดียวที่ใช้งานได้คือถ้า startDateOfMonth และ endDateOfMonth เหล่านั้นไม่ได้อยู่ใน ObservableObject แต่เป็นตัวแปรในมุมมองบรรพบุรุษซึ่งฉันส่งผ่านเป็นพารามิเตอร์ไปยังมุมมองของฉันด้วย fetchRequest init แต่ฉันมีมุมมองแบบนี้น้อยและต้องการใช้ ObservableObject ไม่ใช่ส่งผ่านพารามิเตอร์เดียวกันไปยังมุมมองย่อยตลอดเวลา
ปัญหาคือคุณไม่สามารถใช้@EnvironmentObjectในไฟล์init(). ตัวเลือกที่เป็นไปได้คือการส่งEnvironmentObjectพารามิเตอร์ as ไปยัง View จากนั้นใช้พารามิเตอร์นั้นภายใน init นี่คือสร้างสำหรับมุมมองแล้วคุณสามารถเข้าถึงเริ่มต้นและ EndTime 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))
}
ในกรณีที่คุณเรียกมุมมองนั้นให้ส่งผ่านEnvironmentObjectพารามิเตอร์ as
//Declared as Environment Object
TransactionsListView(selectedDate : self.selectedDate)
Swift รับประกันคุณสมบัติทั้งหมดจะเริ่มต้นหลังจากเริ่มต้น
เมื่อคุณเข้าถึงคุณสมบัติอ็อบเจ็กต์จะถือว่าอ็อบเจ็กต์ถูกเตรียมใช้งานแล้วซึ่งไม่ใช่กรณีนี้เมื่อคุณเข้าถึงตรงกลางของการเริ่ม
สิ่งที่เกิดขึ้นคือเมื่อคุณเริ่มต้นfetchRequestคุณจะเข้าถึงself.selectedDate(เช่นเดียวกับคอมไพเลอร์ไม่ว่าคุณจะเพิ่มตนเองหรือไม่ก็ตาม) ซึ่งแสดงให้เห็นว่าตัวเองถูกเริ่มต้นซึ่งหมายความว่าfetchRequestในฐานะหนึ่งในคุณสมบัติของตนเองพร้อมใช้งาน ดังนั้นข้อผิดพลาดของคอมไพเลอร์:
ตัวแปร 'self.fetchRequest' ที่ใช้ก่อนที่จะเริ่มต้น
ทำให้fetchRequestคุณสมบัติที่คำนวณหรือขี้เกียจควรใช้งานได้ (ไม่ค่อยชิน@FetchRequest)
หวังว่านี่จะช่วยได้
คุณสามารถส่งเป็นพารามิเตอร์ไปยัง View:
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
}
}
เก็บselectedDateเป็น@Stateใน SuperView และสร้างTransactionsListViewมูลค่าปัจจุบัน
Jana Duggar เปิดใจเกี่ยวกับการค้นหาความรักของเธอ นี่คือทุกสิ่งที่เธอพูดเกี่ยวกับหัวข้อและกรอบเวลา 5 ปีสำหรับการแต่งงาน
เมื่อเร็ว ๆ นี้ แซม ฮิวแฮน นักแสดงจากเรื่อง 'Outlander' ได้เปิดเผยสิ่งที่เขาจะทำจากกองถ่ายเพื่อระลึกถึงเจมี เฟรเซอร์ บทบาทที่ทำให้เขากลายเป็นดารา
'She Loves You' เขียนขึ้นในหนึ่งชั่วโมง บันทึกเสียงในหนึ่งวัน และเป็นเพลงของ The Beatles ที่มีการแสดงที่ดีที่สุดเพลงหนึ่งในอาชีพของพวกเขา
Dolly Parton และคุณย่า Bessie มีความสัมพันธ์พิเศษ คุณยายพาร์ตันป่วยหนัก แต่นั่นไม่ได้ทำให้ดอลลี่หยุดแกล้งเธอ
คุณอาจคิดว่าไม้โอ๊คหรือฮิคคอรีเป็นไม้ที่แข็ง แต่เมื่อต้องพูดถึงไม้ที่แข็งที่สุดในโลกแล้ว พวกมันกลับไม่ใกล้เคียงเลย
มหาสมุทรเต็มไปด้วยความงาม แต่ก็ซ่อนสิ่งมีชีวิตใต้ท้องทะเลที่น่ากลัวที่สุดบางชนิดไว้เช่นกัน สัตว์เหล่านี้หลายชนิดซ่อนตัวอยู่ใต้ผิวน้ำอันมืดมิด ในโลกใต้ทะเลลึกอันแสนกดดันและมืดมิด
หากคุณกำลังต่อสู้กับศัตรูหรือกำลังเตรียมตัวสำหรับโหมด PvP การรู้ถึงการเสริมพลังดาบที่ดีที่สุดใน Minecraft จะช่วยให้คุณได้เปรียบอย่างมาก การเสริมพลังดาบจะช่วยให้คุณสร้างความเสียหายได้มากขึ้น เพิ่มจำนวนม็อบที่ดรอป และเพิ่มความทนทานของดาบ
เมื่อผู้คนพูดถึงประเทศสังคมนิยม พวกเขามักจะนึกถึงการควบคุมโดยรัฐบาลอย่างเต็มรูปแบบโดยไม่มีกรรมสิทธิ์ส่วนบุคคล แต่ในทางปฏิบัติ เศรษฐกิจแบบสังคมนิยมมีความหลากหลายอย่างมาก
“เด็ก” โผล่รับเชิญดาราดังพร้อมข่าวร้าย
RAV4 นี้อ้างว่าอยู่ในสภาพที่ดีเยี่ยมและมีไว้สำหรับการเล่นเก้าอี้ดนตรี
ภาพจากโดรนจับภาพนักดับเพลิงที่กำลังพยายามดับไฟ
Eyes of Wakanda เชื่อมโยงโดยตรงกับ MCU พร้อมอัปเดตเกี่ยวกับ X-Men '97, What If..., Daredevil และอีกมากมาย
Ava Gardner แต่งงานกับ Mickey Rooney และ Frank Sintra และเธอยังคบหาดูใจกับดาราฮอลลีวูดอีกหลายคน ต่อไปนี้คือประวัติการออกเดทของ Ava Gardner
จอห์น คลีส แต่งงานกับเจนนิเฟอร์ เวด ภรรยาของเขาในปี 2012 นี่คือทุกสิ่งที่คุณต้องรู้เกี่ยวกับเจนนิเฟอร์ เวด ภรรยาของจอห์น คลีส
Michael C. Hall แต่งงานกับ Morgan Macgregor ภรรยาของเขาตั้งแต่ปี 2016 นี่คือทุกสิ่งที่คุณต้องการทราบเกี่ยวกับภรรยาของ Michael C. Hall
Mena Suvari แต่งงานกับ Michael Hope สามีของเธอมาตั้งแต่ปี 2018 นี่คือทุกสิ่งที่ควรรู้เกี่ยวกับสามีของ Mena Suvari
มันทำให้ฉันประหลาดใจ ทันใดนั้นมันก็เกิดขึ้นบ่อยๆ มันอยู่กลางทางอีกครั้ง <ไม่ ไม่ใช่คนในมหาสมุทรแปซิฟิก คุณเป็นสีน้ำตาลแดง คนที่งานคาร์นิวัล> ทุกพาดหัวข่าวดัง…..
ในปี 2022 ด้วยการเปิดตัว GPT-3 ทักษะการเขียนดูเหมือนจะมีความสำคัญน้อยลง ด้วย AI คนที่เขียนไม่ดีก็สามารถสร้างพนักงานที่มีคุณภาพได้เช่นกัน
ในโลกที่เปลี่ยนแปลงอย่างรวดเร็วและการแข่งขันในปัจจุบัน อาชีพของคนๆ หนึ่งมีบทบาทสำคัญในการเติบโตส่วนบุคคล ความมั่นคงทางการเงิน และความพึงพอใจในชีวิตโดยรวม อย่างไรก็ตาม ผู้คนจำนวนมากพบว่าตัวเองติดอยู่ในวงจรของความเมื่อยล้าและความไม่พอใจอย่างไม่หยุดยั้ง ค่อยๆ สูญเสียชีวิตการทำงานไป
เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์