Saya ingin memuat gambar dari URL di aplikasi saya, jadi saya pertama kali mencoba dengan Objective-C dan itu berhasil, namun, dengan Swift, saya memiliki kesalahan kompilasi:
'imageWithData' tidak tersedia: gunakan konstruksi objek 'UIImage (data :)'
Fungsi saya:
@IBOutlet var imageView : UIImageView
override func viewDidLoad() {
super.viewDidLoad()
var url:NSURL = NSURL.URLWithString("http://myURL/ios8.png")
var data:NSData = NSData.dataWithContentsOfURL(url, options: nil, error: nil)
imageView.image = UIImage.imageWithData(data)// Error here
}
Dalam Objective-C:
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:(@"http://myURL/ios8.png")];
NSData *data = [NSData dataWithContentsOfURL:url];
_imageView.image = [UIImage imageWithData: data];
_labelURL.text = @"http://www.quentinroussat.fr/assets/img/iOS%20icon's%20Style/ios8.png";
}
Dapatkah seseorang tolong jelaskan saya mengapa imageWithData:
itu tidak bekerja dengan Swift, dan bagaimana saya bisa menyelesaikan masalah.
imageURL.image = UIImage(data: myDataVar)
Jawaban:
Xcode 8 atau lebih baru • Swift 3 atau lebih baru
Serentak:
Secara serempak:
Buat metode dengan handler penyelesaian untuk mendapatkan data gambar dari url Anda
Buat metode untuk mengunduh gambar (memulai tugas)
Pemakaian:
Ekstensi :
Pemakaian:
sumber
UITableView
mana sel menunjukkan gambar dan gambar diperbarui ketika sel yang dequeued dikembalikan. Jika proses # 1 membutuhkan waktu lebih lama dari proses # 2, proses # 2 akan menampilkan gambarnya dan kemudian akan diperbarui oleh proses # 1 meskipun gambar itu tidak lagi berlaku untuk pengguna.(Pembaruan Swift 4) Untuk menjawab pertanyaan asli secara langsung, inilah persamaan cepat dari cuplikan Objective-C yang diposting.
PENOLAKAN:
Penting untuk dicatat bahwa
Data(contentsOf:)
metode ini akan mengunduh konten url secara serentak di utas yang sama dengan kode yang sedang dijalankan, jadi jangan gunakan ini di utas utama aplikasi Anda.Cara mudah untuk membuat kode yang sama berjalan secara asinkron, tidak memblokir UI, adalah dengan menggunakan GCD:
Yang mengatakan, dalam aplikasi kehidupan nyata, jika Anda ingin memiliki Pengalaman Pengguna terbaik dan menghindari beberapa unduhan dari gambar yang sama, Anda mungkin ingin memilikinya tidak hanya diunduh, tetapi juga di-cache. Sudah ada beberapa perpustakaan yang melakukan itu dengan sangat mulus dan semuanya sangat mudah digunakan. Saya pribadi merekomendasikan Kingfisher :
Dan itu saja
sumber
image.url
dengan url string apa pun, hardcoded atau tidak :)URLSession.dataTask
karena banyak jawaban lain di sini sudah menunjukkan bagaimana melakukannya, Lebih baik membiarkan berbagai opsi tetap terbuka.Jika Anda hanya ingin memuat gambar (Asinkron!) - cukup tambahkan ekstensi kecil ini ke kode cepat Anda:
Dan gunakan seperti ini:
sumber
cancel
tombol itu berhenti mengunduh. Apakah Anda tahu bagaimana saya bisa melakukan ini dengan menggunakan metode ini? Saya harus menambahkan fungsi pembatalan.Swift 2.2 || Xcode 7.3
Ini menyediakan beberapa fitur seperti:
dan sangat mudah diimplementasikan untuk aplikasi Anda
Langkah.1 Instal pod
Alamofire 3.3.x
Gambar Alamofire 2.4.x
Langkah.2 impor dan Penggunaan
itu dia!! itu akan mengurus semuanya
Terima kasih banyak kepada Alamofire guys , karena membuat hidup iDevelopers mudah;)
sumber
Xcode 8 • Swift 3
Jawaban Leo Dabus luar biasa! Saya hanya ingin memberikan solusi fungsi all-in-one:
sumber
Saya membungkus kode jawaban terbaik untuk pertanyaan menjadi satu, kelas yang dapat digunakan kembali memperluas UIImageView, sehingga Anda dapat langsung menggunakan memuat asynchronous UIImageViews di storyboard Anda (atau membuatnya dari kode).
Ini kelas saya:
dan inilah cara menggunakannya:
sumber
Swift 4 ::
Ini akan menunjukkan pemuat saat memuat gambar. Anda dapat menggunakan NSCache yang menyimpan gambar sementara
Pemakaian:-
sumber
sumber
fatal error: unexpectedly found nil while unwrapping an Optional value
FYI: Untuk swift-2.0 Xcode7.0 beta2
sumber
swift 3 dengan penanganan kesalahan
Dengan ekstensi
Penggunaan Ekstensi
Dengan dukungan Cache
sumber
Swift 4: Pemuat sederhana untuk gambar kecil (mis: thumbnail) yang menggunakan NSCache dan selalu berjalan di utas utama:
Pemakaian:
sumber
class
.Anda ingin melakukannya:
Di Swift, mereka telah mengganti sebagian besar metode pabrik Objective C dengan konstruktor reguler.
Lihat:
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-XID_26
sumber
+(instancetype)[MyThing thingWithOtherThing:]
, Anda akan menyebutnya sepertiMyThing(otherThing: ...)
di Swift juga.Swift 2 dengan error Handle dan header permintaan khusus
Cukup tambahkan ekstensi ke UIImageView:
Dan kemudian, gunakan yang baru
imageFromUrl(urlString: String)
untuk mengunduh gambarPemakaian:
sumber
Cepat 4
Metode ini akan mengunduh gambar dari situs web secara tidak sinkron dan menyimpannya:
Digunakan:
sumber
Swift 2.0:
1)
ATAU
2) Tambahkan metode ini ke VC atau Extension.
Penggunaan:
sumber
URL Github - https://github.com/onevcat/Kingfisher
sumber
Berikut adalah kode Bekerja untuk Memuat / Mengunduh gambar dari URL. NSCache secara otomatis dan Tampilkan gambar Placeholder sebelum mengunduh dan Muat gambar yang Sebenarnya (Kode Swift 4).
Gunakan Seperti ini:
sumber
Metode untuk mendapatkan gambar yang aman dan berfungsi dengan Swift 2.0 dan X-Code 7.1:
Anda kemudian akan memanggil metode ini seperti:
Jika Anda memperbarui tampilan dengan gambar, Anda harus menggunakannya setelah "jika berhasil {":
Alasan bagian terakhir ini diperlukan jika Anda menggunakan gambar di UI adalah karena panggilan jaringan membutuhkan waktu. Jika Anda mencoba memperbarui UI menggunakan gambar tanpa memanggil dispatch_async seperti di atas, komputer akan mencari gambar saat gambar masih diambil, temukan bahwa tidak ada gambar (belum), dan lanjutkan seolah-olah tidak ada gambar ditemukan. Menempatkan kode Anda di dalam penutupan penyelesaian dispatch_async mengatakan ke komputer, "Pergi, dapatkan gambar ini dan ketika Anda selesai, kemudian lengkapi kode ini." Dengan begitu, Anda akan memiliki gambar ketika kode dipanggil dan semuanya akan bekerja dengan baik.
sumber
Jika Anda mencari implementasi yang sangat sangat sederhana. (Ini bekerja untuk saya di Swift 2)
Saya menerapkan dalam tampilan tabel dengan sel khusus yang hanya memiliki gambar
sumber
Saya sarankan menggunakan perpustakaan Kingfisher untuk mengunduh gambar secara tidak sinkron. Bagian terbaik tentang menggunakan Kingfisher adalah, cache semua gambar yang diunduh secara default dengan url gambar sebagai id. Lain kali ketika Anda meminta untuk mengunduh gambar dengan URl tertentu, itu akan memuatnya dari cache.
Pemakaian:
sumber
Anda dapat menggunakan pod
SDWebImage
untuk mencapai hal yang sama. Mudah digunakan. Anda bisa mendapatkan dokumen di sini SDWebImageIni kode contohnya
sumber
cepat 5
untuk digunakan
sumber
Satu-satunya hal yang hilang adalah!
sumber
Jawaban Swift 2.x yang mengunduh gambar ke file (berbeda dengan jawaban Leo Dabus, yang menyimpan gambar dalam memori). Berdasarkan jawaban Leo Dabus dan jawaban Rob dari Dapatkan data dari NSURLSession DownloadTaskWithRequest dari complet handler :
sumber
Swift 4.1 Saya telah membuat suatu fungsi cukup dengan url gambar, tombol cache setelah gambar dibuat setel ke blok penyelesaian.
sumber
Saya telah membuat fungsi kelas sederhana di
Utils.swift
kelas saya untuk memanggil metode yang dapat Anda akses dengan mudahclassname.methodname
dan gambar Anda disimpan di NSCache menggunakanImageCaching.swift
kelasSelamat Codding. Bersulang:)
sumber
Swift 4.2 dan AlamofireImage
Jika menggunakan perpustakaan bukan masalah, Anda bisa melakukannya dengan bantuan
AlamofireImage
. sampel saya berasal dari Github -nyaContoh Gambar Placeholder:
ini memiliki banyak fungsi dan ekstensi yang berguna untuk bekerja dengan gambar. dari caching hingga scaling dan mengubah ukuran atau bahkan menerapkan filter pada gambar. jika gambar penting di aplikasi Anda, saya sarankan untuk menggunakan kerangka kerja ini dan menghemat waktu Anda.
sumber
Penggunaan Ascyimageview Anda dapat dengan mudah memuat imageurl di imageview.
biarkan image1Url: URL = URL (string: "(imageurl)" sebagai String)! imageview.imageURL = image1Url
sumber
Memuat gambar dari server: -
Penggunaan: -
sumber
Untuk kinerja yang lebih baik di
UITableView
atauUICollectionView
gunakan pustaka ringan Pemuatan Malas Cerdas Anda dapat menggunakan pendekatan pemuatan malas ini jika Anda ingin memuat gambar dari url AsynchronousCerdas 'Lazy Loading' di
UICollectionView
atauUITableView
menggunakanNSOperation
danNSOperationQueue
di iOS Jadi dalam proyek ini kita dapat mengunduh banyak gambar di Tampilan apa pun (UICollectionView
atauUITableView
) dengan mengoptimalkan kinerja aplikasi dengan menggunakanOperation
danOperationQueue
untuk konkurensi. berikut ini adalah poin utama dari proyek ini. Pemuatan Malas Cerdas: Membuat Layanan unduhan gambar. Prioritaskan pengunduhan berdasarkan visibilitas sel.Kelas ImageDownloadService akan membuat instance tunggal dan memiliki instance NSCache untuk cache gambar yang telah diunduh. Kami telah mewarisi kelas Operasi ke TOperation untuk menjalankan fungsi sesuai dengan kebutuhan kami. Saya pikir properti dari subclass operasi cukup jelas dalam hal fungsionalitas. Kami memantau perubahan operasi negara dengan menggunakan KVO.
sumber