Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

308
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda