Skip to content

Instantly share code, notes, and snippets.

@rajatmohanty
Forked from RuiAAPeres/notifiers.swift
Created May 8, 2020 18:42
Show Gist options
  • Save rajatmohanty/db192c46bd9ebde2635fcf406aa59da2 to your computer and use it in GitHub Desktop.
Save rajatmohanty/db192c46bd9ebde2635fcf406aa59da2 to your computer and use it in GitHub Desktop.
import Foundation
@propertyWrapper struct Notifier<Value> {
private let identifier: String
var wrappedValue: Value? {
didSet {
NotificationCenter.default.post(name: Notification.Name(identifier), object: wrappedValue)
}
}
init(identifier: String) {
self.identifier = identifier
}
}
@propertyWrapper class Notified<Value> {
private let identifier: String
var wrappedValue: Value?
init(identifier: String) {
self.identifier = identifier
NotificationCenter.default.addObserver(forName: Notification.Name(identifier), object: nil, queue: nil, using: {[weak self] notification in
self?.wrappedValue = notification.object as? Value
})
}
}
struct Person {
@Notifier(identifier: "person.name.changed")
var name: String?
}
class Observer {
@Notified(identifier: "person.name.changed")
var name: String?
}
var person = Person()
var observer = Observer()
observer.name /// nil
person.name = "Hello world"
observer.name /// "Hello world"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment