初始化器不可访问,由于 'internal' 保护级别。

8

我在Swift中定义了一个结构体,其中包含公共属性。

public struct MyStruct {
   
    public let prop1: String
    public let prop2: String
}

在我的代码中,我试图通过以下方式初始化结构体:

MyStruct(prop1: "abc", prop2: "def")

但是编译器报错说:“由于'internal'保护级别,无法访问'MyStruct'的初始化程序。”
该结构体和成员都具有公共保护级别,并且我不理解什么是“internal”保护级别。

奇怪。你尝试过清理和重新构建吗? - Sweeper
所有公共结构体需要一个公共的初始化函数。@Sweeper,这在Swift 5.1中不是这样吗? - Jawad Ali
在这种情况下,应该自动生成一个初始化程序,但根据 OP 的说法,它没有生成。 - Sweeper
2个回答

6
首先,有五个不同的保护级别:privatefileprivateinternalpublicopen
如果您声明的属性、函数或初始化器没有保护级别关键字,它将自动声明为internalinternal表示您的属性、方法或初始化器在同一模块内都可以访问。

看起来您正在尝试从另一个模块创建一个新的结构体。 最好的解决方案可能是创建自己的init而不是自动生成的,并将其声明为public。

希望这对您有所帮助。

0

你不必将结构体的属性定义为公共的,

只需像这样定义初始化器(public init)即可:

public struct MyStruct {

   let prop1: String
   let prop2: String

   public init(prop1: String, prop2: String){
       self.prop1 = prop1
       self.prop2 = prop2
   }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接