Skip to content

Commit

Permalink
[Add] Observer 패턴 추가 #10
Browse files Browse the repository at this point in the history
  • Loading branch information
meltsplit committed Apr 27, 2023
1 parent c3a085f commit 5e188ff
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions SOPTving/SOPTving/Utility/DesignPattern/Observable.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//
// Observable.swift
// SOPTving
//
// Created by 장석우 on 2023/04/28.
//

import Foundation

final class Observable<T> {

struct Observer<T> {
weak var observer: AnyObject?
let block: (T) -> Void
}

private var observers = [Observer<T>]()

var value: T {
didSet { notifyObservers() }
}

init(_ value: T) {
self.value = value
}

func observe(on observer: AnyObject, observerBlock: @escaping (T) -> Void) {
observers.append(Observer(observer: observer, block: observerBlock))
observerBlock(self.value)
}

func remove(observer: AnyObject) {
observers = observers.filter { $0.observer !== observer }
}

private func notifyObservers() {
for observer in observers {
observer.block(self.value)
}
}
}

0 comments on commit 5e188ff

Please sign in to comment.