Получить ответ от Alomafire

Рейтинг: -1Ответов: 2Опубликовано: 22.02.2023

мне необходимо получить ответ от сервера(использую Alamofire) и отдать нужный результат в return функции

struct ApiResponce: Codable {
    let error: Int
    let errordesc: String
    let id: Int?
    let token: String?
}

func ServerRequest(requestData:[String:Any]) -> Int {
    var codeResp=0
    AF.request("https://myurl.com/myapi/", method: .post, parameters: requestData).responseDecodable(of:ApiResponce.self)
    { data in
        print(data)
        switch data.result {
        case .success(let data):
            if data.error == 223
            {
                codeResp=1
            }
        case .failure(let error):
            print(error)
        }
    }
    return codeResp
}

но функция все время выдает 0, хотя приходит код 223(в ответе от сервака) и по идее должно выдавать 1.

Предполагаю, что функция не ожидает ответ и выполнение запроса к серверу происходит асинхронно. А мне надо чтоб функция отдала по сути результат выполнения запроса к серверу.

Подскажите куда копать?

Ответы

▲ 0

Вы правы в своих предположениях, поэтому, как вариант, вам нужно написать escaping замыкание, которое будет выполняться после выполнения запроса, что-то вроде такого:

func serverRequest(requestData: [String:Any], completion: @escaping (Int?) -> Void) {
    AF.request("https://myurl.com/myapi/", method: .post, parameters: requestData).responseDecodable(of:ApiResponce.self) { data in
        print(data)
        switch data.result {
        case .success(let data):
            if data.error == 223
            {
                completion(1)
            }
            completion(0)
        case .failure(let error):
            print(error)
            completion(nil)
        }
    }
}

И вызывать ее вот так:

 serverRequest(requestData: ...) { result in
     print(result)
 }
▲ 0

@Oleg Soloviev

если делать так как вы говорите то ...

print("stroka1")
serverRequest(requestData: ...) { result in
     print(result)
 }

print("stroka2")

результат такой

stroka1
stroka2
результат выполнения

а нужен такой

stroka1
результат выполнения
stroka2

мне надо дождаться ответа от сервера и в зависимости от ответа идти разными путями