Demo entry 6626321

dsdsdsds

   

Submitted by anonymous on Jun 24, 2017 at 10:05
Language: Swift. Code size: 1.6 kB.

protocol Promatrac {
    var naziv: String { get }
    func azuriraj(_ subjekt: Subjekt)
}

class Radnik: Promatrac {

    let naziv: String

    init(naziv: String) {
        self.naziv = naziv
    }

    func azuriraj(_ subjekt: Subjekt) {
        guard let brod = subjekt as? Brod else { return }
        print("\(naziv) je primio obavijest: \(brod.name) promijenio brzinu na \(brod.brzina)")
    }

}

class Subjekt {

    var observers = [Promatrac]()

    func obavijesti() {
        observers.forEach{
            $0.azuriraj(self)
        }
    }

    func dodaj(promatrac: Promatrac) {
        observers.append(promatrac)
    }

    func ukloni(promatrac: Promatrac) {
        guard let index = observers.index(where: { $0.naziv == promatrac.naziv }) else { return }
        observers.remove(at: index)
    }

}

class Brod: Subjekt {

    let name: String
    private var _brzina: Double = 0.0

    init(name: String) {
        self.name = name
    }

    var brzina: Double {
        get {
            return _brzina
        }
        set {
            _brzina = newValue
            guard newValue > 200.0 else { return }
            obavijesti()
        }
    }

}

let brod = Brod(name: "Maersk")
let radnik1 = Radnik(naziv: "Kapetan")
let radnik2 = Radnik(naziv: "1. casnik")
brod.dodaj(promatrac: radnik1)
brod.dodaj(promatrac: radnik2)

brod.brzina = 100
brod.brzina = 150
brod.brzina = 180
brod.brzina = 210
brod.ukloni(promatrac: radnik2)
brod.brzina = 199
brod.brzina = 220

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).