protocol LoadProtocol {
func beginLoad()
func endLoad()
}
extension LoadProtocol {
func load<T>(_ action: T, _ perform: (T, @escaping () -> Void) -> Void) {
beginLoad()
perform(action, endLoad)
}
}
Example
struct Loading: LoadProtocol {
func beginLoad() {
print("Show loading")
}
func endLoad() {
print("Hide loading")
}
func loginApi(name: String, completion: @escaping (Bool) -> Void) {
print("Call api login")
completion(name == "blcsntb")
}
func test() {
load(loginApi) { (login, fulfill) in
login("blcsntb") { success in
print("result:", success)
fulfill()
}
}
}
}
let loading = Loading()
loading.test()
Console
Show loading
Call api login
result: true
Hide loading