URLRequest.AddValue() заставляет календарь SwiftUI возвращать дату

#swift #datepicker #swiftui #urlrequest

#swift #datepicker #swiftui #urlrequest

Вопрос:

Приведенная ниже функция вызывается каждые 3 секунды и выглядит следующим образом:

 func fetchItems(){
    let url = URL(string: itemUrl)!
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.addValue("Item (self.item)", forHTTPHeaderField: "Authorization")
    let task = URLSession.shared.dataTask(with: request, completionHandler: parseJasonObject)
    task.resume()
}

func parseJasonObject(data: Data?, urlResponse: URLResponse?, error: Error?){
    guard error == nil else {
        print("error: (error!)")
        return
    }
    
    guard let content = data else{
        print("No data")
        return
    }
    
    if let decodedResponse = try? JSONDecoder().decode([itemdata]?.self, from: content) {
        // we have good data – go back to the main thread
        DispatchQueue.main.async {
            self.items = decodedResponse
            self.dataHasLoaded = true // state variable that determines whether or not data has been loaded
        }
    }
    
}
  

Если я закомментирую строку request.AddValue() , это приведет к тому, что календарь не будет показывать странный сбой, когда при переходе к календарю на новый месяц или другую дату, при запуске вышеуказанной функции календарь возвращается на начальный экран (с указанием текущей даты). Календарь выглядит следующим образом:

 @State private var selectedStartTime = Date()
let timer = Timer.publish(every: 3, on: .main, in: .common).autoconnect()

HStack {
    Spacer()
    DatePicker("", selection: self.$selectedStartTime, in: Date()...) //where self.$selectedStartTime is just a variable that is defined by the date/time the user selected
        .datePickerStyle(GraphicalDatePickerStyle())
    Spacer()
}
  

https://www.youtube.com/watch?v=ns9XXgrmiZk

Как вы можете видеть, если я перейду к другому месяцу без выбора даты в этом месяце, когда запускается функция fetchEvents() — она выполняется каждые 3 секунды внутри onReceive — это заставляет календарь возвращаться к текущему выбранному дню. Если я выберу новый день в другом месяце, это не проблема. Любая помощь будет принята с благодарностью.

Комментарии:

1. требуется минимальный воспроизводимый пример

2. @Asperi Сложно сделать его полностью минимально воспроизводимым примером, потому что вы, ребята, очевидно, не подключены к серверной части, но я добавил кое-что, что должно помочь понять, что происходит… еще раз заранее спасибо!

3. где используются эти два значения? self.items = decodedResponse self.dataHasLoaded = true //

4. @JIEWANG он используется во множестве разных мест …. но он также используется в функции onReceive … может ли это быть источником ошибки?

5. @nickcoding это возможно, можете ли вы поместить весь свой код, связанный с вашим «представлением календаря»?