DidSet ve WillSet

DidSet ve WillSet özellik gözlemleyiciler olarak isimledirebiliriz. (Property Observer) Property'lerin değerini sürekli olarak gözlemleyerek eğer bir değer değişikliği varsa tetiklenen kod parçasıdır. İsminden de anlaşılacağı gibi

  • willSet , bir özellik değişmeden hemen önce çalışır.
  • didSet , özellik değiştikten hemen sonra çalışır.
var name: String? {

    willSet { 
    	print("Name will change now.") 
    }
    
    didSet { 
    	print("Name was changed.")
    }
}

name = "Jack"

//Name will change now.
//Name was changed.

Eğer öncesinde bir değer bulunuyorsa,

var name: String = "Alice" {
    willSet { 
  	  print("Name will from \(name) to \(newValue)") 
    }
    didSet { 
  	  print("Name changed from \(oldValue) to \(name)")
    }
}
name = "Jack"

//Name will from Alice to Jack
//Name changed from Alice to Jack

Kullanımı akılda kalıcı olması için birkaç farklı örnek daha,

var score = 0 {
    didSet {
        scoreLabel.text = "Score: \(score)"
    }
}


internal final class NotesViewController: UIViewController {

    // MARK: - Properties

    @IBOutlet private var tableView: UITableView! {
        didSet {
            // Configure Table View
            tableView.delegate = self
            tableView.dataSource = self
            tableView.showsVerticalScrollIndicator = false

            // Register Note Table View Cell
            tableView.register(
           	 NoteTableViewCell.self,
           	 forCellReuseIdentifier: NoteTableViewCell.reuseIdentifier
            )
        }
    }

    // MARK: -

    @IBOutlet private var messageLabel: UILabel! {
        didSet {
            // Configure Message Label
            messageLabel.numberOfLines = 0
            messageLabel.font = .systemFont(ofSize: 15.0)
            messageLabel.text = NSLocalizedString(
            	"notes_message_no_notes", comment: ""
            )
        }
    }

}