1

我正在尝试在 SwiftUI 游乐场中使用多个文件。我在源代码的单独文件中添加了一些代码。我只想在点击按钮时显示工作表视图。即使我已经公开了结构,但我仍然收到错误,因为“SecondView 初始化程序由于内部保护级别而无法访问”

这是代码:


struct ContentView: View {
    @State private var showingScene = false
    var body: some View {
        Button(action: {
            self.showingScene.toggle()
        }, label: {
            Text("Button")
        })
        .sheet(isPresented: $showingScene, content: {
           SecondView()  
        })
    }
}

//The code in source file

import SwiftUI

public struct SecondView: View{

    public var body: some View {

    Text("Second View")       

    }
}

4

1 回答 1

1

默认初始化程序(由编译器生成的初始化程序,因为您没有明确声明)实际上是internal.

这记录在这里

默认初始化器与它初始化的类型具有相同的访问级别,除非该类型被定义为公共。对于定义为公共的类型,默认初始化程序被认为是内部的。如果您希望在另一个模块中使用公共类型时可以使用无参数初始化程序进行初始化,则您必须自己显式地提供一个公共无参数初始化程序作为类型定义的一部分。

所以你应该这样做:

public struct SecondView: View{

    public init() { } // here!
    
    public var body: some View {

        Text("Second View")

    }
}
于 2021-06-14T10:13:29.837 回答