Sobes.tech
Junior

Əgər dəyişən üçün setter təyin olunursa, bu nə deməkdir?

sobes.tech Süni İntellekt

AI-dan cavab

Setter (təyin edən) yeni dəyəri dəyişənə yazmağa nəzarət etməyə imkan verən metoddur. Setter təyin edildikdə, standart dəyər təyin etmə mexanizmi, setter daxilindəki kodla əvəz olunur. Bu, aşağıdakı imkanları verir:

  • Daxil olan məlumatların doğrulanması: Yeni dəyərin müəyyən şərtlərə cavab verdiyini yoxlamaq, onu dəyişənə təyin etmədən əvvəl.
    var age: Int = 0 {
        didSet { // DidSet (dəyişdikdən sonra) setter çağırılır
            if age < 0 {
                age = 0 // Mənfi dəyərə icazə vermirik
            }
        }
    }
    
  • Əlavə əməliyyatların yerinə yetirilməsi: Dəyişən dəyəri dəyişdikdə başqa kodların işlədilməsi, məsələn, istifadəçi interfeysinin yenilənməsi və ya digər hissələrə bildiriş göndərilməsi.
    var score: Int = 0 {
        didSet { // DidSet (dəyişdikdən sonra)
            print("Xal yeniləndi: \(score)") // Dəyişikliyi qeyd et
            updateUI() // UI-ni yenilə
        }
    }
    
    func updateUI() {
        // İnterfeysi yeniləmək üçün kod
    }
    
  • Digər xüsusiyyətlərin dəyərlərinin hesablanması: Bir xüsusiyyətin dəyişməsi, başqa bir xüsusiyyətin dəyərinə təsir edə bilər.
    var radius: Double = 0.0 {
        didSet { // DidSet
            area = Double.pi * radius * radius // Radius dəyişdikdə sahəni yenidən hesabla
        }
    }
    
    var area: Double = 0.0 // radius-dən asılı xüsusiyyət
    

Swift-də setterlər, saxlanılan (stored properties) və hesablanan (computed properties) xüsusiyyətlər üçün istifadə oluna bilər. Saxlanılan xüsusiyyətlər üçün, tez-tez property observers (willSetdidSet) istifadə olunur, bunlar yeni dəyər təyin edilmədən əvvəl və sonra çağrılır. Hesablanan xüsusiyyətlər üçün isə, set setter-in necə təyin olunacağını müəyyən edir.

var myProperty: String {
    // Getter
    get {
        return "Dəyər: \(internalValue)"
    }
    // Setter
    set(newValue) {
        internalValue = newValue + " işlənmiş" // Təyin olunan dəyəri dəyişdir
    }
}

private var internalValue: String = "" // Daxili saxlanılan xüsusiyyət