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の配列になってしまう。
解決法
@Serializable
data class GetClipRes(
@SerialName("data")
- val data: List<ClipData?>?,
+ val data: List<ClipData>?,
@SerialName("pagination")
val pagination: Pagination?
)
このように変更すると
このようにdataの型が、ClipDataの配列になっている。
今回の反省点
何でもかんでもnull許容にするのはやめよう!