https://pblog.johndtech.asia/posts/swift-protocol-not-conform-to-itself/