36 lines
811 B
Swift
36 lines
811 B
Swift
//
|
|
// ModelData.swift
|
|
// Example (iOS)
|
|
//
|
|
// Copyright © 2021 Xmartlabs SRL. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
struct PostsFactory {
|
|
static let shared = PostsFactory()
|
|
var posts: [Post] = load("postsData.json")
|
|
}
|
|
|
|
func load<T: Decodable>(_ filename: String) -> T {
|
|
let data: Data
|
|
|
|
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
|
|
else {
|
|
fatalError("Couldn't find \(filename) in main bundle.")
|
|
}
|
|
|
|
do {
|
|
data = try Data(contentsOf: file)
|
|
} catch {
|
|
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
|
|
}
|
|
|
|
do {
|
|
let decoder = JSONDecoder()
|
|
return try decoder.decode(T.self, from: data)
|
|
} catch {
|
|
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
|
|
}
|
|
}
|