Konvertieren einer Zeichenfolge einer Bild-URL der API in UIImageIOS

Programmierung für iOS
Guest
 Konvertieren einer Zeichenfolge einer Bild-URL der API in UIImage

Post by Guest »

Ich versuche, eine URL-Zeichenfolge zu konvertieren, die ich von der API erhalte. Ich erhalte die URL für die API in meiner ModelView wie folgt:

Code: Select all

class DetailViewModel {

var countryCode : String?

public func getImageURL(with completion: @escaping (String) -> Void) {
APIHandler.getDataForCountryImage(for: countryCode!) { result in
print("result is \(result)")
completion(result.data.flagImageUri)
}
}
}
Die obige print-Anweisung gibt die URL erfolgreich als Zeichenfolge aus. Es ist also kein Problem, die URL als Zeichenfolge zu erhalten.
Ich initialisiere meinen viewController mit dem viewModel wie folgt:

Code: Select all

private var viewModel: DetailViewModel

//MARK: - LifeCycle

init(with viewModel: DetailViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)

}
und versuche, den Bild-URL-String, den ich von modelView erhalten habe, mit dem folgenden Code in UIImage zu konvertieren:

Code: Select all

 private func setCountryFlagImage() {
self.viewModel.getImageURL { [weak self] imageURL in
print("image url is \(imageURL)")
let url = URL(string: imageURL)
DispatchQueue.main.async {
self?.countryImage.load(url: url!)
}
}
}
Diese Funktion druckt auch die Anweisung print("image url is (imageURL)") mit der zugehörigen URL als Zeichenfolge.
Innerhalb der Dispatchque verwende ich grundsätzlich die UIImageView-Erweiterung, die ich unten geschrieben habe. countryImage ist die UIImageView, deren Bild ich aktualisieren möchte.

Code: Select all

extension UIImageView {
func load(url: URL) {
URLSession.shared.dataTask(with: url) { data, response, error in
if error == nil {
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data) else { return }
DispatchQueue.main.async { [weak self] in
print("dispatch")
self?.image = image
}
}
else {
print("error is \(error)")
}

}.resume()
}
}
Wenn ich den Code ausführe, kann ich die Druckanweisung von setCountryFlagImage im Terminal sehen, aber zusätzlich gibt es eine Warnung: "[boringssl] Boringssl_metrics_log_metric_block_invoke(144)" aber ich denke, das könnte für mein Problem irrelevant sein.
Im Erweiterungsblock des Codes sehe ich nie die print("dispatch")-Anweisung und Dies geschieht, weil ich let image = UIImage(data: data)
Was übersehe ich hier nicht?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post