Skip to content

Instantly share code, notes, and snippets.

@k-motoyan
Created July 19, 2017 03:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save k-motoyan/d9c981775309cd26fa305a74326dfe78 to your computer and use it in GitHub Desktop.
Save k-motoyan/d9c981775309cd26fa305a74326dfe78 to your computer and use it in GitHub Desktop.
Static Dependency injection for Swift.
import Foundation
protocol Logger {
func write(_ message: String)
}
final class SystemLogger: Logger {
func write(_ message: String) {
print("System: " + message)
}
}
final class TextLogger: Logger {
func write(_ message: String) {
print("Text: " + message)
}
}
protocol UsesLogger {
var logger: Logger { get }
}
protocol MixinSystemLogger {}
extension MixinSystemLogger {
var logger: Logger { return SystemLogger() }
}
protocol MixinTextLogger {}
extension MixinTextLogger {
var logger: Logger { return TextLogger() }
}
final class Client: UsesLogger, MixinSystemLogger {
func test() {
logger.write("test")
}
}
// For test.
// struct MockLogger: Logger {
// func write(_ message: String) {
// print("Mock: " + message)
// }
// }
// protocol Mock {}
// extension MixinSystemLogger where Self: Mock {
// var logger: Logger { return MockLogger() }
// }
// extension Client: Mock {}
// Run!
let client = Client()
client.test()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment