Generic Model Struct pada Swift

Photo by Jonathan Farber on Unsplash

Sudah barang pasti jika kita menulis kode yang berhubungan dengan API Service kita perlu mendefinisikan model nya agar rapi dan jelas.

contoh kata kita memiliki response seperti berikut:

{
"success": true,
"message": "User logged in successfully",
"data": {}
}

dimana results akan selalu dinamis dan berubah ubah tergantung dari /path apa yang kita hit dan response apa yang dikembalikan.

namun demi mengurangi redundansi kode sebaiknya kita membuat model generic nya pada class BaseResponse.swift seperti berikut:

struct BaseResponse<T: Decodable>: Decodable {
var success: Bool
var message: String
var data: T
}

nah andai kita data memiliki object seperti berikut:

{
"success": true,
"message": "User logged in successfully",
"data": {
"name": "Nam Do Wan",
"age": 17
}
}

maka kita hanya perlu membuat sebuah class baru misal User.swift :

struct User: Decodable {
var name: String
var age: Int
}

ketika kita memerlukan model nya kita cukup menulisnya sebagai BaseResponse<User>

contoh kasus saat kita ingin decode json menjadi model biasa kita akan menemui kode seperti :

let decodedData = try JSONDecoder().decode(UserResponse.self, from: data)

namun saat ini kita bisa langsung mengubahnya menjadi:

let decodedData = try JSONDecoder().decode(BaseResponse<User>.self, from: data)

Sekian tips yang bisa saya share. semoga bermanfaat dan bisa menjadi nilai lebih untuk kode yang kita tulis. Thank you.

Swift, Kotlin and Flutter Developer | Tech Geek, Passionate Writer — ihwan.id