Hi! I'm trying to hide new Logger API with protocol, but get runtime error.
protocol MyLogger {
associatedtype Message: ExpressibleByStringInterpolation where Message.StringLiteralType == String
func log(_ message: Message)
}
class SomethingWithLogger<L: MyLogger> {
let logger: L
init(logger: L) {
self.logger = logger
}
func log() {
logger.log("log")
}
}
And try to use it:
extension Logger: MyLogger {
public typealias Message = OSLogMessage
}
final class LoggerExampleTests: XCTestCase {
func testLog1() {
let smthWithLogger = SomethingWithLogger(logger: Logger())
let logger = smthWithLogger.logger
logger.log("log")
}
func testLog2() {
let smthWithLogger = SomethingWithLogger(logger: Logger())
smthWithLogger.log()
}
}
First test ends with success, but second crashes with EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). iOS 14 is still in beta so I'm not sure is there bug in my code or somewhere else. if it's my fault - what do I do wrong?