Dans la version bêta d'Alamofire 5, SessionManager
a été remplacé par Session
.
Je me demande quelle est la procédure actuelle pour attribuer un RequestAdapter, car il s'agissait d'un var
dans Alamofire 4, mais dans Alamofire 5, c'est maintenant une constante let
. D'où le code suivant:
var session = Session() session.adapter = AccessTokenAdapter
renvoie une erreur de compilation, "Impossible d'affecter à la propriété: 'adapter' est une constante 'let'"
Le but final est pour définir des champs d'en-tête personnalisés tels que le jeton JWT.
4 Réponses :
Cela fonctionne pour moi dans la dernière version d'Alamofire
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (AFResult<URLRequest>) -> Void) { var modifiedURLRequest = urlRequest modifiedURLRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization") completion(.success(urlRequest)) }
Vous devez vous conformer au protocole " RequestInterceptor " de votre classe, qui a des méthodes identiques:
adapter et réessayer comme dans RequestAdapter et RequestRetrier.
Ensuite, il vous suffit de le transmettre à request
AF.request(urlRequest, interceptor: RequestInterceptor? = nil)
Ma solution:
import Foundation import Alamofire class AFAuth { public static let session : Session = { let session = Session(interceptor: AuthRequestInterceptor()) return session }() @discardableResult public static func request(_ urlRequest: URLRequestConvertible) -> DataRequest { return AFAuth.session.request(urlRequest) } }
class ConnectionService { private var session: Session! init() { let config = Session.default.session.configuration session = Session(configuration: config, interceptor: self) } } extension ConnectionService: RequestInterceptor { func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) { //.... } }