Song のデータの型(Entity)を定義して持ち回したい
Closed this issue · 0 comments
zdogma commented
持ち回すデータの型(Entity)を定義する
ViewControllerのdataをSong型として定義してあげるとスッキリします。あとJSONマッピングをObjectMapperなどを使ってやるとJSONとEntity間の変換が見通しやすくなりますよ!
import ObjectMapper
struct Song: ImmutableMappable {
let title: String
let text: String
let thumbnail_url: String
let series: String
let scene: String
let singer: String
let embed_movie_src: String
init(map: Map) throws {
title = try map.value("title")
text = try map.value("text")
thumbnail_url = try map.value("thumbnail_url")
series = try map.value("series")
scene = try map.value("scene")
singer = try map.value("singer")
embed_movie_src = try map.value("embed_movie_src")
}
}
そんでSong型オブジェクトをSongListTableViewControllerとViewControllerで持ち回すようにするといいです。ローカルのJSONファイルから[Song]に変換するメソッドはたとえば次のようになります。
func loadSongs() throws -> [Song] {
if
let path = Bundle.main.path(forResource: "aikatsu_songs", ofType: "json"),
let data = FileManager.default.contents(atPath: path) {
let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! [[String: Any]]
return try Mapper<Song>().mapArray(JSONArray: json)
} else {
// なにかがおかしいよエラー
throw CustomError.somethingWrong
}
}
// どっか別のファイルに定義してもよい
enum CustomError: Error {
case somethingWrong
}