由于编译器具有“内部”保护级别,因此无法访问框架init中的公共结构

Qiquan Lu

我在名为“ MyFramework”的框架中有一个结构

public struct ShipmentPackage:Encodable {
  let package_code:String
  let weight:Float
}

然后,当我尝试在另一个项目/框架中创建ShipmentPackage时

import MyFramework
let onePackage = ShipmentPackage(package_code:"BX",weight:100)

我收到一条错误消息,由于“内部”保护级别,无法访问“ ShipmentPackage”初始化程序。我进入此链接https://forums.swift.org/t/public-struct-init-is-un-expectedly-internal/5028

我试图将代码更改为以下内容:

第一次尝试:

public struct ShipmentPackage:Encodable {
  let package_code:String
  let weight:Float
  public init(package_code:String,weight:Float){
    self.package_code = package_code
    self.weight = weight
  }
}

第二次尝试:

public struct ShipmentPackage:Encodable {
  public let package_code:String
  public let weight:Float
  public init(package_code:String,weight:Float){
    self.package_code = package_code
    self.weight = weight
  }
}

我也尝试将package_code和weight更改为public,但是以上都不起作用,编译时出现错误消息

<unknown>:0: error: 'init' is inaccessible due to 'internal' protection level
<unknown>:0: note: 'init' declared here
<unknown>:0: error: 'init' is inaccessible due to 'internal' protection level

任何提示将不胜感激!

安德烈亚斯(Andreas Oetjen)

经验教训:所有公共结构都需要一个公共init

那不是很准确。文档指出:

结构类型的默认成员级初始化程序

如果结构的任何存储属性是私有的,则该结构类型的默认成员初始化器被视为私有的。同样,如果结构的任何存储属性是文件专用的,则初始化程序是文件专用的。否则,初始化程序的访问级别为internal。

因此,内置成员式初始化程序仅在包内可用。如果您不提供公共初始化程序,则将无法从外层空间创建结构。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

由于“内部”保护级别为swift 4,因此无法访问扩展初始化程序

未序列化的结构列表的列表。由于其保护级别,因此无法访问System.RuntimeType。只能处理公共类型

公共类由于其保护级别而无法访问

由于其保护级别而无法访问该结构

由于“内部”保护级别,无法访问“ indexOf”

框架中的单例错误:由于“私有”保护级别,无法访问初始化程序

由于自身文件的私有保护级别,无法访问结构初始化程序

由于“私有”保护级别,无法访问func

由于C#中的保护级别而无法访问

由于保护级别而无法访问

错误:由于保护级别为C#,因此无法访问Car.Form1。

“由于'内部'保护级别,'isSuccess'无法访问”,AlamoFire无法像以前那样工作

由于“内部”保护级别,无法访问初始化程序

由于“内部”保护级别,无法访问初始化程序

由于保护级别,无法访问页面字段

错误:由于其保护级别而无法访问

由于其保护级别,无法访问方法XXX

成员变量由于其保护级别而无法访问

由于其保护级别,无法访问Vector.Value

由于其保护级别 C# 无法访问

由于其保护级别,无法访问UserControl元素

由于其保护级别,无法访问“设置”

由于其保护级别而无法访问

“ WebHost”由于其保护级别而无法访问

由于其保护级别,无法访问“ xx”

'ModbusSerialMaster' 由于其保护级别而无法访问

由于保护级别c#类而无法访问

由于其保护级别,无法访问frmMain

方法由于其保护级别而无法访问