#swift #alamofire
#swift #alamofire
Вопрос:
Мой код выборки, как показано ниже: тип URL-адреса — string, но когда я отправляю формат json в url, выдается ошибка. Пожалуйста, привет. я поделился своей функцией и экраном ошибки, как показано ниже.
public func fetch<T:Codable> (headers:HTTPHeaders,_ method: HTTPMethod, url: String, requestModel: T?, model: T.Type, completion: @escaping (AFResult<Codable>) -> Void)
{
AF.request(
url,
method: method,
parameters: NetworkManager.toParameters(model: requestModel),
encoding: JSONEncoding.default,
headers: headers
)
.validate()
.responseJSON { response in
switch response.result {
case .success(let value as [String: AnyObject]):
do{
let responseJsonData = JSON(value)
let responseModel = try JSONDecoder().decode(model.self, from: responseJsonData.rawData())
completion(.success(responseModel))
}
catch let parsingError{
print("Success (error): (parsingError)")
}
case .failure(let error):
print("Failure: (error)")
completion(.failure(error))
default: fatalError("Fatal error.")
}
}
}
Мой метод использования:
import Foundation
import SwiftUI
import Alamofire
import SwiftyJSON
class SorularController {
var arraySorular:[Soru] = []
public func GetSorularByDersId(dersId:Int,headers:HTTPHeaders,completion: @escaping ([Soru])->()){
NetworkManager.instance.fetch(headers: headers, HTTPMethod.get, url: #"https://app.kivacrm.com/api/v1/data/osym/sorular?filters={"ders":["=",3]}"#, requestModel: nil, model: Soru.self) { (response) in
switch(response)
{
case .success(let model):
let soruModel=model as! Soru
self.arraySorular.append(soruModel)
case .failure(_) :break
}
}
}
Комментарии:
1. Вам нужно узнать о кодировке URL-адресов, w3schools.com/tags/ref_urlencode.ASP
Ответ №1:
Чтобы ваш URL-адрес был действительным, параметры get должны быть закодированы в url.
Попробуйте передать свой filters
параметр в parameters
dictionary и использовать URLEncoding
вместо JSONEncoding
для этого вызова:
AF.request(
"https://app.kivacrm.com/api/v1/data/osym/sorular",
method: .get,
parameters: ["filters": #"{"ders":["=",3]}"#],
encoding: URLEncoding.default,
headers: headers
)