Я пытаюсь получить некоторые данные из API. Он прекрасно выбирает данные, когда я подключаю функцию к IBAction, но не работает, когда я выполняю ее в viewDidLoad () как обычная функция.
Я надеялся сгенерировать ее при загрузке приложения так что я могу отображать их в виде таблицы вместо необходимости нажимать кнопку, чтобы загружать их каждый раз.
Я получаю сообщение об ошибке «Указанные данные были недействительными JSON» после попытки выполнить функцию из viewDidLoad ()
Ниже приведены коды для справки:
struct Claims: Decodable {
let id: Int
let submission_date: String
let status: String
init(json: [String:Any]) {
id = json["id"] as? Int ?? -1
submission_date = json["submission_date"] as? String ?? ""
status = json["status"] as? String ?? ""
}
}
class DashboardController: UIViewController, GIDSignInUIDelegate {
var claimSummaryArray: [ClaimProperties] = []
let appDelegate = UIApplication.shared.delegate as! AppDelegate
override func viewDidLoad() {
getData()
}
func getData() {
guard let urlString = URL(string: "https://claim.ademo.work/claims/") else { return }
var requestAPI = URLRequest(url: urlString)
requestAPI.httpMethod = "GET"
requestAPI.addValue("application/json", forHTTPHeaderField: "Content-Type")
requestAPI.addValue("application/json", forHTTPHeaderField: "Accept")
requestAPI.setValue("Bearer \(appDelegate.userAppToken)", forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: requestAPI) { (data, response, error) in
if let data = data {
do {
let json = try JSONDecoder().decode([Claims].self, from: data)
print (json)
} catch let error {
print("Seems to have an error: \(error)")
}
}
}
task.resume()
}
}
Переменная данных, которая возвращается (выполняется через IBAction / нажатие кнопки):
[ClaimApp.Claims(id: 1, submission_date: "2020-02-28T13:50:41.000+08:00", status: "pending"), ClaimApp.Claims(id: 2, submission_date: "2020-02-28T13:53:38.000+08:00", status: "pending"), ClaimApp.Claims(id: 3, submission_date: "2020-02-28T14:21:46.000+08:00", status: "pending"), ClaimApp.Claims(id: 4, submission_date: "2020-02-28T14:22:07.000+08:00", status: "pending")]
Ошибка, которая возвращается (выполняется посредством вызова нормальной функции из viewDidLoad ()):
Seems to have an error: dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.})))
PS / Я новичок здесь, извиняюсь, если есть какое-либо недопонимание или путаница.