Skip to content

Instantly share code, notes, and snippets.

@kyungpyoda
Created October 5, 2025 13:00
Show Gist options
  • Select an option

  • Save kyungpyoda/8b5c779babfdb282303cba23873cd2ba to your computer and use it in GitHub Desktop.

Select an option

Save kyungpyoda/8b5c779babfdb282303cba23873cd2ba to your computer and use it in GitHub Desktop.
TinyRIB
//
// TinyRIB.swift
//
// Created by 홍경표 on 10/5/25.
//
final class TinyInteractor: Interactor {
let becomeActiveHandler: (() -> Void)?
let resignActiveHandler: (() -> Void)?
init(
becomeActiveHandler: (() -> Void)?,
resignActiveHandler: (() -> Void)?
) {
self.becomeActiveHandler = becomeActiveHandler
self.resignActiveHandler = resignActiveHandler
}
override func didBecomeActive() {
super.didBecomeActive()
becomeActiveHandler?()
}
override func willResignActive() {
super.willResignActive()
resignActiveHandler?()
}
}
protocol TinyRIB: AnyObject {
func build(withListener: Listener) -> Routing
func didBecomeActive()
func willResignActive()
var listener: Listener? { get set }
associatedtype Listener //: AnyObject
}
extension TinyRIB {
func build(withListener listener: Listener) -> Routing {
self.listener = listener
let interactor = TinyInteractor(
becomeActiveHandler: { [weak self] in
self?.didBecomeActive()
},
resignActiveHandler: { [weak self] in
self?.listener = nil
self?.willResignActive()
}
)
return Router(interactor: interactor)
}
func willResignActive() {
// no-op
}
}
protocol MyListener: AnyObject {
func hello()
}
final class MyTinyRIB: TinyRIB {
weak var listener: MyListener?
func didBecomeActive() {
print("myTiny active!!!")
listener?.hello()
}
func willResignActive() {
print("myTiny resign!!!")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment