Created
July 19, 2017 03:21
-
-
Save k-motoyan/d9c981775309cd26fa305a74326dfe78 to your computer and use it in GitHub Desktop.
Static Dependency injection for Swift.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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