SwiftUI-带私有变量的PreviewProvider

问题描述

我正在使用CoreData填充视图中的字段,该视图将转换为PDF。预览功能可以帮助设计视图,这是很好的,但是,我遇到了一个带有私有变量的障碍。具体来说,我遇到一个错误提示"initializer is inaccessible due to 'private' protection level"。如下所示,company是私有变量。我可以使用预览部分中的代码来预览quote变量的组成数据,但是,对于company来说,这是行不通的。

struct PDFQuoteView: View {
    @Environment(\.managedobjectContext) var moc
    @State private var company: Company
    var quote: Quote?
    var body: some View { 

struct PDFQuoteView_Previews: PreviewProvider {
    static var previews: some View {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        let newQuote = Quote.init(context: context)
        let newCompany = Company.init(context: context)
        newQuote.quoteNumber = "AA0202"
        newCompany.name = "Acme Incorporated"
        return PDFQuoteView(company: newCompany,quote: newQuote).environment(\.managedobjectContext,context)
                .previewLayout(.fixed(width: 612,height: 792)) //this is the error line
    }
}

解决方法

对于现有视图,可以通过添加显式init来解决此错误,例如

struct PDFQuoteView: View {
    @Environment(\.managedObjectContext) var moc
    @State private var company: Company
    private var quote: Quote?

    init(company: Company,quote: Quote?) {
       self._company = State(initialValue: company)
       self.quote = quote
    }

    var body: some View { 
       ...