'Index out of range swiftui?

i have this struct import Foundation

  import Foundation

     // MARK: - Welcome

  struct Say: Codable {

    let response: [Rest]

    init(response: [Rest]) {

    self.response = response

       }

}

// MARK: - Response

struct Rest: Codable {

       let eventID: String

       let data: ClassMe

 enum CodingKeys: String, CodingKey {

     case eventID = "event_id"

     case data

}

init(eventID: String, data: ClassMe) {

        self.eventID = eventID

         self.data = data

    }

}

// MARK: - DataClass

struct ClassMe: Codable {

       let toTime, to, addInfo, maxWeight: String

       let freeSpace, type, fromTime: String

       let blocked: Blocked

       let fromDate: String

       let index: Int

       let toDate, cost, from: String

       let isDeleted: Bool

       let userID: String

enum CodingKeys: String, CodingKey {

      case toTime, to, addInfo, maxWeight, freeSpace, type, blocked, fromTime, fromDate, index

      case toDate = "ToDate"

      case cost, from

      case isDeleted = "is_deleted"

      case userID = "userId"

}

init(toTime: String, to: String, addInfo: String, maxWeight: String, freeSpace: String, type: String, blocked: Blocked, fromTime: String, fromDate: String, index: Int, toDate: String, cost: String, from: String, isDeleted: Bool, userID: String) {

        self.toTime = toTime

        self.to= to

        self.addInfo = addInfo

        self.maxWeight = maxWeight

        self.freeSpace = freeSpace

        self.type = type

        self.blocked = blocked

        self.fromTime = fromTime

        self.fromDate = fromDate

        self.index = index

        self.toDate = toDate

        self.cost = cost

        self.from = from

        self.isDeleted = isDeleted

        self.userID = userID

}

}

enum Blocked: Codable {

          case anythingArray([JSONAny])

          case string(String)

init(from decoder: Decoder) throws {

       let container = try decoder.singleValueContainer()

       if let x = try? container.decode([JSONAny].self) {

       self = .anythingArray(x)

       return

}

      if let x = try? container.decode(String.self) {

      self = .string(x)

      eturn

}

    throw DecodingError.typeMismatch(Blocked.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Blocked"))

}

func encode(to encoder: Encoder) throws {

      var container = encoder.singleValueContainer()

      switch self {

      case .anythingArray(let x):

      try container.encode(x)

      case .string(let x):

      try container.encode(x)

    }

   }

}

and if i want to save in core inside an http request i can’t for i

func httpfetchEventFly(){

// declare the parameter as a dictionary that contains string as key and value combination. considering inputs are valid

     let dateFormatter = DateFormatter()

     let t: [Int] = Array(0...100)

     // var i: Int = 0

     @State var i = 0

     let parameters:Dictionary<String, Any> = [

     "data" : [

     "date":"07-03-2022",

     "type":"airplane"

     ]

   ]

// create the url with URL

       let url = URL(string: "myURL")! // change server url accordingly

// create the session object

       let session = URLSession.shared

// now create the URLRequest object using the url object

        var request = URLRequest(url: url)

        request.httpMethod = "POST" //set http method as POST

        request.httpBody = parameters.percentEncoded()

// add headers for the request

        request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") // change as per server requirements

        request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept")

     do {

// convert parameters to Data and assign dictionary to httpBody of request

          request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)

      } catch let error {

      print(error.localizedDescription)

      return

    }

// create dataTask using the session object to send data to the server

      let task = session.dataTask(with: request) { data, response, error in

        if let error = error {

              print("Post Request Error: \(error.localizedDescription)")

             return
 
      }

// ensure there is valid response code returned from this HTTP response

       guard let httpResponse = response as? HTTPURLResponse,

       (200...299).contains(httpResponse.statusCode)

     else {

          print("Invalid Response received from the server")

      return

}

// ensure there is data returned

    guard let responseData = data else {

           print("nil Data received from the server")

           return

   }

    do {

// create json object from data or use JSONDecoder to convert to Model stuct

     if let jsonResponse = try JSONSerialization.jsonObject(with: responseData, options: .mutableContainers) as? Dictionary<String,Any>{

      print(jsonResponse)

      let decoder = JSONDecoder()

    do {

      let loginResponse = try decoder.decode(Say.self, from: responseData)

      for i in t.prefix(120) { ← ((((that doesn’t work i want a solution for the index i))))

   print("fromdate:", loginResponse.response[i].data.fromDate)

       let peerfly = Peerfly(context: self.persistentContainer.viewContext)

        //peertraffic.fromDate = dateFormatter.date(from: loginResponse.response[i].data.fromDate)

           peerfly.fromDate = loginResponse.response[i].data.fromDate

           peerfly.toDate = loginResponse.response[i].data.toDate

           peerfly.freeSpace = loginResponse.response[i].data.freeSpace

           peerfly.from = loginResponse.response[i].data.from

           peerfly.to = loginResponse.response[i].data.to

           peerfly.fromTime = loginResponse.response[i].data.fromTime

           peerfly.toTime = loginResponse.response[i].data.fromTime

           peerfly.cost = loginResponse.response[i].data.cost

           peerfly.maxWeight = loginResponse.response[i].data.maxWeight

           peerfly.addInfo = loginResponse.response[i].data.addInfo

           peerfly.eventID = loginResponse.response[i].eventID

}

     do {

          try self.persistentContainer.viewContext.save()

   } catch {

      print("Failed to save event \(error)")
 
}

    DispatchQueue.main.async {

        self.events = loginResponse

}

    } catch {

        print(error)

}

// handle json response

} else {

       print("data maybe corrupted or in wrong format")

       throw URLError(.badServerResponse)

   }

} catch let error {

      print(error.localizedDescription)
 
     }

}

// perform the task

task.resume()

}

}

}

i want an index to loop but when it reaches a null value it doesn’t do fatal error ,and out of range , i just want to take the index that has data which is the response array and if is null it does nothing ( neither prints or throw fatal error ), but can't do it

knowing that i used persistent because i am storing in core data

thank you very much my friends



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source