cache json data from api to use it in table view swift 5

325 Views Asked by At

How can I Cache JSON from API ?

i Fetch the JSON from the API & Parse the JSON data. These can be done with the help of Alamofire & ObjectMapper and this my way to do this this my request function

Alamofire.request(URL(string: baseurl + serviceName) !,
    method: .post,
    parameters: parameters,
    encoding: createEncoding(serviceName: serviceName),
    headers: createHeaders(serviceName: serviceName))
  .responseJSON {
    (response: DataResponse < Any > ) in
    if let status = response.response ? .statusCode {
        print("URL: \(baseurl + serviceName)")
        print("request \(String(describing: NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)))")
        let data = response.data
        let responseStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) !as String
        print("response \(responseStr)")
        // String(data: response.request?.httpBody!, encoding: String.Encoding.utf8) as String!
        switch (status) {
          case 200:
            do {
              if let jsonArray =
                try JSONSerialization.jsonObject(with: data!, options: []) as ? [
                  [String: AnyObject]
                ] {
                  let genericArray = Mapper < RS > ().mapArray(JSONArray: jsonArray)
                  let arr = [RS](JSONArray: jsonArray)
                  let base = RS()
                  base!.genericArray = arr
                  print(genericArray)
                  callBack_Handler(base!)
                } else if
              let genericResponse = RS(JSONString: responseStr) {
                callBack_Handler(genericResponse)
              }

            } catch {
              print("Error deserializing JSON: \(error)")

            }

and this mapping model function import ObjectMapper

Alamofire.request(URL(string: baseurl + serviceName) !,
    method: .post,
    parameters: parameters,
    encoding: createEncoding(serviceName: serviceName),
    headers: createHeaders(serviceName: serviceName))
  .responseJSON {
    (response: DataResponse < Any > ) in
    if let status = response.response ? .statusCode {
        print("URL: \(baseurl + serviceName)")
        print("request \(String(describing: NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)))")
        let data = response.data
        let responseStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) !as String
        print("response \(responseStr)")
        // String(data: response.request?.httpBody!, encoding: String.Encoding.utf8) as String!
        switch (status) {
          case 200:
            do {
              if let jsonArray =
                try JSONSerialization.jsonObject(with: data!, options: []) as ? [
                  [String: AnyObject]
                ] {
                  let genericArray = Mapper < RS > ().mapArray(JSONArray: jsonArray)
                  let arr = [RS](JSONArray: jsonArray)
                  let base = RS()
                  base!.genericArray = arr
                  print(genericArray)
                  callBack_Handler(base!)
                } else if
              let genericResponse = RS(JSONString: responseStr) {
                callBack_Handler(genericResponse)
              }

            } catch {
              print("Error deserializing JSON: \(error)")

            }

I will populate the parsed data in the Table View. It works when the user is in Online. How can I cache the data to show it when the user is offline?

0

There are 0 best solutions below