Swift: Kontrola dostępu
Opublikowano: 16.11.2023 - tagi: Swift Klasa Struktura Dostęp
Kontrola dostępu w Swift
Dzięki kontroli dostępu możesz określić dostępność klas, struktur, enumeracji, protokołach, właściwości, metod itp.
Swift udostępnia kilka poziomów dostępu.
Są to:
- open
- public
- private
- fileprivate
- internal
Dostęp: open
Poziom dostępu open pozwala na to, że każdy ma do tego dostęp: zarówno z poziomu modułu jak i z zewnątrz.
Dzięki temu możesz pozwolić sobie także na nadpisywanie.
Jest to najmniej restrykcyjnym poziomem dostępu w Swift.
Dostęp: public
Jeśli określisz coś jako public to znaczy, że informujesz, że każdy może mieć do tego dostęp.
Podobne do open, ale różnica między nimi jest taka, że masz do tego dostęp wszędzie, ale nie możesz sobie pozwolić na nadpisanie z poziomu innego modułu.
Na przykład:
class MyClass {
public name: String = ""
}
var obj = MyClass()
obj.name = "Public"
print(obj.name) // Public
Dostęp: private
private sprawia, że dostęp jest ograniczony do danego zakresu.
class User {
private firstName: String = ""
private lastName: String = ""
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
func getFullName() -> String {
return "\(firstName) \(lastName)"
}
}
var user = User(firstName: "Jan", lastName: "Kowalski")
print(user.getFullName())
user.firstName = "Adam" // Błąd!
Dostęp: fileprivate
Ten poziom dostępu podobny jest do private. Różnica jest taka, że dostęp jest ograniczony w obrębie pliku.
class User {
fileprivate firstName: String = ""
fileprivate lastName: String = ""
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
func getFullName() -> String {
return "\(firstName) \(lastName)"
}
}
var user = User(firstName: "Jan", lastName: "Kowalski")
print(user.getFullName()) // Jan Kowalski
user.firstName = "Adam"
print(user.getFullName()) // Adam Kowalski
Jeśli spróbujesz się dostać do firstName lub lastName w innym pliku, zostanie zgłoszony błąd.
Inny przykład:
fileprivate class MyClass {
name: String = ""
}
Tak oznaczoną klasę: MyClass możesz używać tylko w pliku, w którym jest stworzona.
Dostęp: internal
internal to domyślny poziom dostępu w Swift.
Czyli zapis:
class MyClass {
...
}
jest równoznaczny z:
internal class MyClass {
...
}
A co to robi? W taki sposób informujemy, że kod jest dostępny w obrębie modułu, ale na zewnątrz już nie.