ProgrammatieiOS architect/bibliotheekontwikkelaar

Hoe werkt toegang controle voor geneste types en leden in Swift? Welke nuances in toegankelijkheid kunnen zich voordoen bij het samenstellen van modules en bibliotheken?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In Swift beïnvloeden toegangsniveaus (private, fileprivate, internal, public, open) niet alleen klassen, structuren en hun eigenschappen, maar ook geneste (nested) types. Een genest type erft standaard het toegangsniveau van zijn omringende type, tenzij er een andere expliciete beperking is opgegeven.

Belangrijke nuances:

  • Als het hoofdtype als internal is verklaard, kan het geneste type niet opener zijn dan het externe, maar kan het wel „geslotener” zijn (bijvoorbeeld, extern — public, genest — private).
  • Bij compilatie in verschillende modules (frameworks) zijn geneste types, verklaard als internal, niet zichtbaar vanuit andere modules.

Voorbeeld:

public class A { public struct B { fileprivate func foo() {} } }

In dit voorbeeld zijn A en B openbaar, maar de methode foo() is bestand-prive.

Vragend met een val.

Vraag: "Kan een genest type een hoger toegangsniveau hebben dan het omringende type?"

Antwoord: Nee, het toegangsniveau van een genest type kan niet hoger zijn dan het toegangsniveau van het omringende type. Als je probeert een genest type met een hoger toegangsniveau te declareren, geeft de compiler een foutmelding.