JSONPlaceholder.swift 1.1 KB
Newer Older
L
libb 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
//
//  JSONPlaceholder.swift
//  swift01
//
//  Created by  on 2020/8/18.
//  Copyright © 2020 admin. All rights reserved.
//

import Foundation

struct JSONPlaceholder {
    static let url = URL(string: "https://jsonplaceholder.typicode.com/posts")
    
    let userID : Int
    let id : Int
    let title : String
    let body : String
    
    enum Keys: String, CodingKey {
        case userId
        case id
        case title
        case body
    }
    
}

extension JSONPlaceholder : Decodable {
    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: Keys.self)
        userID = try values.decode(Int.self, forKey: .userId)
        title = try values.decode(String.self, forKey: .title)
        id = try values.decode(Int.self, forKey: .id)
        body = try values.decode(String.self, forKey: .body)

    }
}

extension JSONPlaceholder {
    static let all = Resource<[JSONPlaceholder]>(JSONPlaceholder.url!) {
        (data) -> [JSONPlaceholder]? in
        let posts = try? JSONDecoder().decode([JSONPlaceholder].self, from: data)
        return posts
        
    }
}