Sobes.tech
Junior

Co oznacza ustawienie setter dla zmiennej?

sobes.tech AI

Odpowiedź od AI

Setter (ustawiacz) to metoda, która pozwala kontrolować zapis nowej wartości do zmiennej. Przy definiowaniu settera standardowy mechanizm przypisywania wartości domyślnie jest zastępowany kodem wewnątrz settera. To umożliwia:

  • Walidację danych wejściowych: Sprawdzanie, czy nowa wartość spełnia określone warunki, zanim zostanie przypisana do zmiennej.
    var age: Int = 0 {
        didSet { // DidSet (po ustawieniu) jest wywoływany po przypisaniu
            if age < 0 {
                age = 0 // Nie pozwalamy na przypisanie wartości ujemnej
            }
        }
    }
    
  • Wykonywanie dodatkowych działań: Uruchamianie innego kodu przy zmianie wartości zmiennej, np. aktualizacja interfejsu użytkownika lub powiadomienia innych części aplikacji.
    var score: Int = 0 {
        didSet { // DidSet (po ustawieniu)
            print("Zaktualizowano wynik do \(score)") // Logowanie zmiany
            updateUI() // Aktualizacja UI
        }
    }
    
    func updateUI() {
        // Kod do aktualizacji interfejsu
    }
    
  • Obliczanie wartości innych właściwości: Zmiana jednej właściwości może wpływać na wartość innej.
    var radius: Double = 0.0 {
        didSet { // DidSet
            area = Double.pi * radius * radius // Przeliczenie powierzchni po zmianie promienia
        }
    }
    
    var area: Double = 0.0 // Właściwość zależna od radius
    

Settery w Swift mogą być używane dla właściwości przechowywanych i właściwości obliczanych. Dla właściwości przechowywanych często używa się obserwatorów właściwości (willSet i didSet), które są wywoływane przed i po ustawieniu nowej wartości. Dla właściwości obliczanych setter (set) określa, jak powinna być przypisana wartość.

var myProperty: String {
    // Getter
    get {
        return "Wartość to: \(internalValue)"
    }
    // Setter
    set(newValue) {
        internalValue = newValue + " przetworzony" // Modyfikacja przypisywanej wartości
    }
}

private var internalValue: String = "" // Wewnętrzna właściwość przechowywana