Bartosz Polaczyk
1 min readNov 28, 2018

--

I wouldn’t consider my previous code as a workaround by the way…
Regarding your issue, this is the only solution I can provide:

class MyScreen:Screen {}
class OtherScreen:Screen {}
final class NavigatorStub: Navigator {
// MARK: - Stubs
lazy var showMyScreenStub = stub(of: showMyScreen)
lazy var showOtherScreenStub = stub(of: showOtherScreen)
// MARK: - API
func showMyScreen(_ screen: MyScreen) {
showMyScreenStub(screen)
}
func showOtherScreen(_ screen: OtherScreen) {
showOtherScreenStub(screen)
}
func show<ScreenType: Screen>(_ screen: ScreenType) {
if let screen = screen as? MyScreen {
showMyScreen(screen)
return
}
if let screen = screen as? OtherScreen {
showOtherScreen(screen)
return
}
fatalError()
}
}

--

--