Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

306
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda