OBSERVATION des PROPRIETES

Permet d'effectuer une action quand une propriété est modifiée

Exemple : une vue en forme de post-it, qui comprend une question vrai ou faux en label. On répond vrai en déplaçant la vue vers la droite, et faux vers la gauche. En fonction de notre geste, la réponse est correct ou incorrect. Un icon pour indiqué l'état de notre réponse. La couleur de fond de la vue change de couleur également.

On a un fichier UIView pour la QuestionView, avec les IBOutlets pour label et icon

import UIKit

class QuestionView: UIView {

    @IBOutlet private var label: UILabel! 
    @IBOutlet private var icon: UIImageView!

    enum Custom {
        case correct, incorrect, standard
    }

    var style: Custom = .standard {
        didSet {
           setStyle(style)
        }
    }

    private func setStyle(_ style: Custom) {
        switch style {
        case .correct:
            backgroundColor = UIColor(displayP3Red: 200/255.0, green: 236/255.0, blue: 160/255.0, alpha: 1)
            icon.image = #imageLiteral(resourceName: "Icon Correct")
            icon.isHidden = false

        case .incorrect:
            backgroundColor = #colorLiteral(red: 0.9565374255, green: 0.5313987136, blue: 0.5824936032, alpha: 1)
            icon.image = UIImage(named: "Icon Error")
            icon.isHidden = false

        case .standard:
            backgroundColor = #colorLiteral(red: 0.7488165498, green: 0.7731627822, blue: 0.7900409102, alpha: 1)
            icon.isHidden = true

        }
    }
    var title = "" {
        didSet {
            label.text = title
        }
    }


}

Dans le ViewController, on gére la QuestionView

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var questionView: QuestionView!

    override func viewDidLoad() {
        super.viewDidLoad()

        startNewGame() 
    }

    private func startNewGame() {

        questionView.title = "La terre est ronde ? " 
        questionView.style = .standard // on remet le style à l'origine, très simple avec la vue customisée
    }

    private func answerQuestion() {
        switch questionView.style {
        case .correct:
            game.answerCurrentQuestion(with: true)
        case .incorrect:
            game.answerCurrentQuestion(with: false)
        case .standard:
            break
        }

etc....pour gérer la réponse