0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SmaproAdvent Calendar 2024

Day 7

KMPでデータクラスに戸惑った話

Posted at

KMPでデータクラスに戸惑った話

今回は、私がKMPでiOSとAndroidでデータクラスを共通化しようとした時に迷ったことを書きます。

何をしようと思ったのか

以下のデータクラスをAndroidとiOSで使用したい
このデータクラスは、Twitch APIを利用して特定のクリップを取得する際に返ってくるレスポンスです。

@Serializable
data class GetClipRes(
    @SerialName("data")
    val data: List<ClipData?>?,
    @SerialName("pagination")
    val pagination: Pagination?
)
@Serializable
data class ClipData(
    @SerialName("broadcaster_id")
    val broadcasterId: String?,
    @SerialName("broadcaster_name")
    val broadcasterName: String?,
    @SerialName("created_at")
    val createdAt: String?,
    @SerialName("creator_id")
    val creatorId: String?,
    @SerialName("creator_name")
    val creatorName: String?,
    @SerialName("duration")
    val duration: Double?,
    @SerialName("embed_url")
    val embedUrl: String?,
    @SerialName("game_id")
    val gameId: String?,
    @SerialName("id")
    val id: String?,
    @SerialName("is_featured")
    val isFeatured: Boolean?,
    @SerialName("language")
    val language: String?,
    @SerialName("thumbnail_url")
    val thumbnailUrl: String?,
    @SerialName("title")
    val title: String?,
    @SerialName("url")
    val url: String?,
    @SerialName("video_id")
    val videoId: String?,
    @SerialName("view_count")
    val viewCount: Int?,
    @SerialName("vod_offset")
    val vodOffset: Int?
)

発生した問題

iOS側で、GetClipResのdataの型がAnyの配列になってしまう。
スクリーンショット 2024-12-07 17.45.52.png

しかし、Android側では問題なく利用出来る。
スクリーンショット 2024-12-07 17.55.06.png

解決法

@Serializable
data class GetClipRes(
    @SerialName("data")
-    val data: List<ClipData?>?,
+    val data: List<ClipData>?,
    @SerialName("pagination")
    val pagination: Pagination?
)

このように変更すると
スクリーンショット 2024-12-07 17.47.31.png
このようにdataの型が、ClipDataの配列になっている。

今回の反省点

何でもかんでもnull許容にするのはやめよう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?