521 Stimmen

Laden/Herunterladen von Bildern von URL auf Swift

Ich möchte ein Bild aus einer URL in meiner Anwendung laden, also habe ich es zuerst mit Objective-C versucht und es hat funktioniert, aber mit Swift habe ich einen Kompilierungsfehler:

'imageWithData' ist nicht verfügbar: Verwenden Sie die Objektkonstruktion 'UIImage(data:)'

Meine Funktion:

@IBOutlet var imageView : UIImageView

override func viewDidLoad() {
    super.viewDidLoad()

    var url:NSURL = NSURL.URLWithString("http://meineURL/ios8.png")
    var data:NSData = NSData.dataWithContentsOfURL(url, options: nil, error: nil)

    imageView.image = UIImage.imageWithData(data)// Fehler hier
}

In Objective-C:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:(@"http://meineURL/ios8.png")];
    NSData *data = [NSData dataWithContentsOfURL:url];

    _imageView.image = [UIImage imageWithData: data];
    _labelURL.text = @"http://www.urltest.fr/assets/img/iOS%20icon's%20Style/ios8.png";
 }

Kann mir bitte jemand erklären, warum imageWithData: nicht mit Swift funktioniert und wie ich das Problem lösen kann.

1voto

Simon Jensen Punkte 71

Das Einzige, was fehlt, ist ein!

let url = NSURL.URLWithString("http://live-wallpaper.net/iphone/img/app/i/p/iphone-4s-wallpapers-mobile-backgrounds-dark_2466f886de3472ef1fa968033f1da3e1_raw_1087fae1932cec8837695934b7eb1250_raw.jpg");
var err: NSError?
var imageData :NSData = NSData.dataWithContentsOfURL(url!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
var bgImage = UIImage(data:imageData!)

1voto

Jawad Ali Punkte 13436

Für bessere Leistung in UITableView oder UICollectionView verwenden Sie die leichte Bibliothek Smart Lazy Loading. Sie können diesen Lazy-Loading-Ansatz verwenden, wenn Sie Bilder von einer URL asynchron laden möchten.

Smart 'Lazy Loading' in UICollectionView oder UITableView mit NSOperation und NSOperationQueue in iOS. In diesem Projekt können wir die mehreren Bilder in jeder Ansicht (UICollectionView oder UITableView) herunterladen, indem wir die Leistung einer App optimieren, indem wir Operation und OperationQueue für Nebenläufigkeit verwenden. Hier sind die wichtigsten Punkte dieses Projekts Smart Lazy Loading: Erstellen des Bild-Download-Services. Priorisierung des Downloads basierend auf der Sichtbarkeit der Zellen.

Die Klasse ImageDownloadService wird eine Singleton-Instanz erstellen und eine NSCache-Instanz haben, um die heruntergeladenen Bilder zu zwischenspeichern. Wir haben die Operation-Klasse zu TOperation geerbt, um die Funktionalität entsprechend unseren Bedürfnissen anzupassen. Ich denke, die Eigenschaften der Operation-Unterklasse sind in Bezug auf die Funktionalität ziemlich klar. Wir überwachen Änderungen des Zustands der Operationen durch Verwendung von KVO.

1voto

Oded Breiner Punkte 26754

Beim Verwenden von SwiftUI ist SDWebImageSwiftUI die beste Option.

Fügen Sie die Abhängigkeit über den Swift Package Manager von XCode hinzu: https://github.com/SDWebImage/SDWebImageSwiftUI.git

Verwenden Sie dann einfach WebImage() anstelle von Image()

WebImage(url: URL(string: "https://nokiatech.github.io/heif/content/images/ski_jump_1440x960.heic"))

1voto

Imran0001 Punkte 588

Sie können ganz einfach ein Bild von der Bild-URL mit Kingfisher herunterladen.

Importieren Sie zunächst Kingfisher als -

pod 'Kingfisher'

Dann importieren Sie es in Ihre Klasse als -

import Kingfisher

Fügen Sie dann ein temporäres UIImageView hinzu

let imgView = UIImageView()
imgView.kf.setImage(with: yourImageURL)

if let finalImage = imgView.image {
    // finalImage ist Ihr Bild
}

1voto

Casse Nhari Punkte 31

Hier ist der einfachste Weg, Sie müssen sich keine Sorgen über async machen oder wie es funktioniert.

import SDWebImage

imageView.sd_setImage(with: URL(string: ".net/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
Verwendung der Kategorie UIImageView+WebCache mit UI

Hier ist ein ausführlicher Blog Beitrag dazu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X