Section 3/71 menit
3. Sintaks dan Cara Kerja
3. Sintaks dan Cara Kerja
Deklarasi
swift
// Variabel
package var internalConfig = Configuration()
// Fungsi
package func setupDatabase() { }
// Class / Struct / Enum
package class PackageRouter { }
package struct PackageConfiguration { }
package enum PackageState { case ready, loading, error }
// Protocol
package protocol PackageServiceProtocol { }
// Extension
package extension String {
func trimmedAndLowercased() -> String {
trimmingCharacters(in: .whitespaces).lowercased()
}
}
// Init
package class Service {
package init(config: Configuration) { }
package var config: Configuration
package func start() { }
// Internal — hanya dalam module ini
func internalOperation() { }
}
Mengaktifkan di Package.swift
swift
// Package.swift — tidak perlu setting khusus untuk Swift 6
// Package access level otomatis tersedia
let package = Package(
name: "MyApp",
targets: [
.target(
name: "Core",
swiftSettings: [
.swiftLanguageVersion(.v6) // aktifkan Swift 6
]
),
.target(
name: "Features",
dependencies: ["Core"],
swiftSettings: [
.swiftLanguageVersion(.v6)
]
)
]
)
Package vs Internal: Perbedaan
swift
// Module A (dalam Package yang sama)
public class PublicClass {
public var publicProp = 0 // accessible dari mana saja
package var packageProp = 0 // accessible dari semua module dalam package ini
internal var internalProp = 0 // hanya dalam Module A
private var privateProp = 0 // hanya dalam class ini
}
// Module B (dalam Package yang sama)
import ModuleA
let obj = PublicClass()
print(obj.publicProp) // ✅ OK
print(obj.packageProp) // ✅ OK (same package)
print(obj.internalProp) // ❌ ERROR (different module)
// Consumer App (di luar Package)
import ModuleA
let obj = PublicClass()
print(obj.publicProp) // ✅ OK
print(obj.packageProp) // ❌ ERROR (different package)