'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 |
|---|
