Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
La estructura pública en framework init es inaccesible debido al nivel de protección 'interno' en el compilador

Tengo una estructura en un marco llamado "MyFramework"

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

Luego, cuando intento crear un ShipmentPackage en otro proyecto/marco

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

Recibí un mensaje de error. El inicializador 'ShipmentPackage' es inaccesible debido al nivel de protección 'interno'. Accedo a este enlace https://forums.swift.org/t/public-struct-init-is-unexpectedly-internal/5028

Intenté cambiar mi código a lo siguiente:

1er intento:

 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 } }

2do intento:

 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 } }

También traté de cambiar el código del paquete y el peso a público, pero ninguno de los anteriores funciona, recibí mensajes de error al compilar

 <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

¡Cualquier pista sería apreciada!

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Lección aprendida : todas las estructuras públicas necesitan un inicio público

Eso no es del todo exacto. La documentación dice:

Inicializadores predeterminados de Memberwise para tipos de estructura

El inicializador de miembros predeterminado para un tipo de estructura se considera privado si alguna de las propiedades almacenadas de la estructura es privada. Del mismo modo, si alguna de las propiedades almacenadas de la estructura es de archivo privado, el inicializador es de archivo privado. De lo contrario, el inicializador tiene un nivel de acceso interno.

Por lo tanto, el inicializador integrado de miembros solo está disponible dentro del paquete. Si no proporciona un inicializador público, no podrá crear su estructura desde el espacio exterior.

 public struct YourFrameworkStruct { let frameworkStructProperty: String! /// Your public structs in your framework need a public init. /// /// Don't forget to add your let properties initial values too. public init(frameworkStructProperty: String) { self.frameworkStructProperty = frameworkStructProperty } }
over 4 years ago · Santiago Trujillo Report

0

Gracias por todos los comentarios, finalmente descubrí por qué me da error. Mis dos intentos deberían estar bien.

Y resultó que esta estructura no estaba causando problemas

Tengo otra estructura que usa esta estructura y la marqué como pública, por ejemplo

 public struct Shipment:Encodable { let carrier_code:String let packages:[ShipmentPackage] }

faltaba el inicializador, pero por alguna razón, XCode no indicará el error para mi espacio de trabajo, sino que dará un error en el momento de la compilación.

después de dar un inicializador a todas las estructuras públicas, la aplicación pasa el compilador.

 public struct Shipment:Encodable { let carrier_code:String let packages:[ShipmentPackage] public init(carrier_code:String,packages:[ShipmentPackage]){ self.carrier_code = carrier_code self.packages = packages } }

Mi publicación original no era realmente buena, ya que no había nada malo con el código que publiqué, pero decido no eliminar esta publicación, podría ayudar a los novatos como yo en el futuro.

Lección aprendida: todas las estructuras públicas necesitan un inicio público

over 4 years ago · Santiago Trujillo Report

0

Cuando intenta acceder a una estructura en un marco diferente, **

todas las variables dentro de la estructura deben ser públicas y deben tener un valor predeterminado establecido en el inicio

**

p.ej:

estructura pública LocationPoint { ubicación de var pública: NSNumber color de var pública: UIColor

 public init(location: NSNumber? = 0, color: UIColor? = nil ) { self.location = location ?? 0 self.color = color ?? UIColor.init(red: 255.0/255.0, green: 1.0, blue: 205/255.0, alpha: 1) } }

También puede escribir el inicio como se muestra a continuación, según la forma en que llame a la estructura.

 public init() { self.location = 0 self.color = UIColor.init(red: 255.0/255.0, green: 1.0, blue: 205/255.0, alpha: 1) }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!