This PR contains the work done to provide the existing `FeedViewController` view controller with real life data by integrating the `iTunesService` service into its view model. In addition, the list item cell has been design has been updated, and re-implemented using the `SwiftUI` framework. Reviewed-on: #9 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
57 lines
1.2 KiB
Swift
57 lines
1.2 KiB
Swift
//
|
|
// Feed.swift
|
|
// ReviewsiTunesKit
|
|
//
|
|
// Created by Javier Cicchelli on 17/03/2024.
|
|
// Copyright © 2024 Röck+Cöde VoF. All rights reserved.
|
|
//
|
|
|
|
import ReviewsFeedKit
|
|
|
|
public struct Feed {
|
|
|
|
// MARK: Constants
|
|
let entries: [Review]
|
|
|
|
// MARK: Initialisers
|
|
public init(entries: [Review]) {
|
|
self.entries = entries
|
|
}
|
|
|
|
}
|
|
|
|
// MARK: - Decodable
|
|
extension Feed: Decodable {
|
|
|
|
// MARK: Enumerations
|
|
enum FeedKeys: String, CodingKey {
|
|
case feed
|
|
}
|
|
|
|
enum EntryKeys: String, CodingKey {
|
|
case entry
|
|
}
|
|
|
|
// MARK: Initialisers
|
|
public init(from decoder: any Decoder) throws {
|
|
let feed = try decoder.container(keyedBy: FeedKeys.self)
|
|
let feedEntry = try feed.nestedContainer(keyedBy: EntryKeys.self, forKey: .feed)
|
|
|
|
self.entries = try feedEntry.decode([Review].self, forKey: .entry)
|
|
}
|
|
|
|
}
|
|
|
|
// MARK: - Encodable
|
|
extension Feed: Encodable {
|
|
|
|
// MARK: Functions
|
|
public func encode(to encoder: any Encoder) throws {
|
|
var feed = encoder.container(keyedBy: FeedKeys.self)
|
|
var feedEntry = feed.nestedContainer(keyedBy: EntryKeys.self, forKey: .feed)
|
|
|
|
try feedEntry.encode(entries, forKey: .entry)
|
|
}
|
|
|
|
}
|