GraphQLクライアントライブラリのApolloを使っています。
Apolloでコードを自動生成すると、モデルがQueryやMutation毎に別に生成されます。
例えばユーザ一覧を返すQuery
query UserList { users { name username id } }
と、ユーザーIDを指定してユーザーを返すQuery
query User($id: ID!) { user(id: $id) { name username id } }
からSwiftコードを生成すると、 UserListQuery.Data.User
と UserQuery.Data.User
のようなかんじで別のmodelになります。
アプリからはこれらを同じように扱いたいことが多いと思います。
そのような時は protocol と extension を使うとうまくいきます。
protocol User { var name: String { get } var username: String { get } var id: String { get } } extension UserListQuery.Data.User: User { } extension UserQuery.Data.User: User { }
↑のようなコードを追加すると、UserListQuery.Data.User
と UserQuery.Data.User
を User
として扱えます。