#9 Pobieranie obrazów z adresu url w SWIFT

Kolejną rzeczą potrzebna do działania naszego projektu będzie pobranie obrazków z adresów url. Będą to loga marek samochodów, a tak że zdjęcia z lokalizacja złącz. Aby pobierać obrazki najpierw musimy pobrać z JSONa adresu url (bezpośrednie ścieżki) do konkretnych grafik. W tym celu po pobraniu z poprzedniego wpisu zapisujemy je jako kolejna zmienną typu string, aby można było mieć łatwy dostęp.

Cały kod podobnie jak przy pobraniu JSONa, wykorzystuje sesję i wbrew pozorom jest prosty w zakodowaniu. Najpierw tworzymy zmienną typu URL ze zmiennej typu string, którą podajemy jako argument. Potem tworzymy nową sesję i dodajemy jej zadanie, gdzie w odpowiedzi zwrotnej dostaniemy odpowiedź lub informację o błędzie. Następnie standardowymi if’ami sprawdzamy poprawność danych. Jeżeli wszystko jest ok to tworzymy UIImage gdzie jako argument data podajemy dane pobrane z adresu url, a na samym końcu utworzony UIImage dodajemy do UIImageView jako opcję image.

func downloadImage(urlToImage: String, imageView: UIImageView) {
        let catPictureURL = URL(string: urlToImage)!
        
        let session = URLSession(configuration: .default)
        
        let downloadPicTask = session.dataTask(with: catPictureURL) { (data, response, error) in
            
            if let e = error {
                print("Error downloading cat picture: \(e)")
            } else {
                
                if let res = response as? HTTPURLResponse {
                    print("Downloaded cat picture with response code \(res.statusCode)")
                    if let imageData = data {
                        imageView.image = UIImage(data: imageData)
                        
                    } else {
                        print("Couldn't get image: Image is nil")
                    }
                } else {
                    print("Couldn't get response code for some reason")
                }
            }
        }
        
        downloadPicTask.resume()
    }

Cały spakowany kod w jedną funkcję staje się bardzo prosty w użyciu, ponieważ podajemy mu tylko adres url, oraz zmienną do UIImageView, gdzie zostanie wczytany obraz po poprawnym pobraniu z serwera.

table view z obrazkami

Całość zapisujemy i robimy commita na serwer. Dodatkowo możemy wgrać więcej marek pojazdów pamiętając o tym że zarówno obrazek z logiem jak i nazwę marki dodajemy tylko na serwerze.

Dodaj komentarz