@Tommy32

Как настроить timeout обращения к интернету на swift3?

Создал функцию для обращения к php методом POST для получения данных, на выходе должен получать массив данных типа [[String:Any]].
Однако return отправляется пустой т.к. требуется время на подключение к интернету и скачиванию массива. Как быть?

var dataTake = [[String: Any]]()
public class initInternet {
    
 
    

 
    
  
    func dataArrayTake(urlPHPServer:String, sentKey: String, nameKey:String, id:Int, nameId:String ) -> [[String:Any]]
    {
     
            
            print("func: resultTake")
            let url = URL(string:urlPHPServer)!
            var request = URLRequest(url:url)
            request.httpMethod = "POST";
            let dataForm = "\(nameKey)=\(sentKey)&\(nameId)=\(id)"
            request.httpBody = dataForm.data(using: .utf8)
        
            let task = URLSession.shared.dataTask(with: request)
            { data, response, error in
                
                guard let data = data, error == nil else
                {
                    print("ошибка данных:\(error)")
                    return
                }
                do
                {
                    if let json = try? JSONSerialization.jsonObject(with: data) as! [String: Any]
                    {
                        let dataArray = json["result"] as! [[String: Any]]
                        
                        dataTake = dataArray
                       
                        
                      
                        
                    }
                }
                if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200
                {
                    print("Код ошибки: \(httpStatus.statusCode)")
                    print("Ошибка = \(response)")
                    
                    
                }
            }
       
            task.resume()
      
        
        return dataTake
    }
}
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
@Tommy32 Автор вопроса
Разобрался. Решил задачу с помощью DispatchSemaphore
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ManWithBear
@ManWithBear
Swift Adept, Prague
За такое количество пустых линий, нужно анально насиловать.

По теме вопроса:
Реквест асинхронный, соответсвенно выход из функции происходит раньше, чем реквест.
Выходы:
1) Синхронный реквест, что в большинстве случаев ужасно.
2) Передавать в функцию колбек, который вызовется при загрузке данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы