Section 2/71 menit
2. Teori: Access Control di Swift
2. Teori: Access Control di Swift
Hierarchy Access Control
Swift 6 kini punya 6 level, dari paling terbatas ke paling luas:
swift
private → hanya dalam declaration + extension di file yang sama
fileprivate → seluruh file
internal → seluruh module (default)
package → seluruh Swift Package (NEW in Swift 6)
public → accessible dari luar, tapi tidak bisa di-subclass/override dari luar
open → accessible dan bisa di-subclass/override dari luar
Apa itu "Package" dalam Konteks ini?
Dalam Swift Package Manager, sebuah package adalah unit distribusi yang didefinisikan oleh Package.swift. Satu package bisa punya beberapa targets (yang menjadi modules terpisah).
swift
// Package.swift
let package = Package(
name: "MySDK",
targets: [
.target(name: "Core"), // Module 1
.target(name: "Analytics", // Module 2
dependencies: ["Core"]),
.target(name: "UI", // Module 3
dependencies: ["Core"]),
]
)
package access level berarti: visible ke semua targets dalam satu Package.swift.
Boundary yang Jelas
swift
Consumer App ──────────────────────────────────────────────────────
│ (tidak bisa akses `package` symbols dari MySDK) │
└──────────────────────────────────────────────────────────────────┘
↕ public / open only
┌──────────────────────────────────────────────────────────────────┐
│ MySDK Package │
│ ┌─────────────┐ package ┌───────────────┐ │
│ │ Core │ ←─────────→ │ Analytics │ │
│ │ Module │ access │ Module │ │
│ └─────────────┘ └───────────────┘ │
│ ↕ package ↕ package │
│ ┌─────────────┐ │
│ │ UI │ │
│ │ Module │ │
│ └─────────────┘ │
└──────────────────────────────────────────────────────────────────┘