protocol Init { init() } protocol Proto { associatedtype JSON: Init } extension Proto { func hoge() -> JSON { return JSON() } } struct Hoge: Proto { struct JSON: Init, CustomStringConvertible { var description: String = "Hoge.JSON" } } print(Hoge().hoge()) // Hoge.JSON
hoge()
が挿入されて推論されるのかJSON
が先にあるのか分からない (edited)