दिलचस्प पोस्ट
JSON Array से डुप्लिकेट ऑब्जेक्ट निकालें HtmlAgilityPack के साथ HTML पृष्ठ को पार्स करना आईफोन ओएस एसडीके <3.2 के साथ काम करने के लिए UI_USER_INTERFACE_IDIOM () कैसे मिलता है पीडीएफ प्रारूप में एएसपी.नेट एमवीसी व्यू को कैसे रेंडर करें दूसरे के साथ एक टैग को बदलने के लिए jQuery का उपयोग करना भिन्न प्रकार के साथ भिन्न संख्याओं के तर्कों को पास करना – सी ++ "शब्द-ब्रेक: ब्रेक-ऑल" बनाम "वर्ड-रैप: ब्रेक-वर्ड" सीएसएस में क्या अंतर है? कैसे एक परिपत्र UIView बनाने के लिए एक अभिव्यक्ति के पहले टिलल्ड क्या करता है? WPF में, मैं यह कैसे निर्धारित कर सकता हूं कि नियंत्रण उपयोगकर्ता के लिए दिखाई दे रहा है? क्या जावा में गतिशील रूप से क्लासपाथ को "जोड़ना" संभव है? जावा में जेनेरिक में विलोपन की अवधारणा क्या है? Std :: iterator के लिए तैयार किया जा रहा है Deprecated जा रहा है $ (दस्तावेज़) के विभिन्न रूप अनुक्रमणिका त्रुटि: सीमा से बाहर सूची असाइनमेंट सूची

स्विफ्ट एसिंक लोड छवि

मैं यूआरएल async से शो छवि पर काम कर रहा हूँ मैंने डाउनलोड छवि के लिए एक नया थ्रेड बनाने का प्रयास किया है और फिर main thread पर रीफ़्रेश करें

 func asyncLoadImg(product:Product,imageView:UIImageView){ let downloadQueue = dispatch_queue_create("com.myApp.processdownload", nil) dispatch_async(downloadQueue){ let data = NSData(contentsOfURL: NSURL(string: product.productImage)!) var image:UIImage? if data != nil{ image = UIImage(data: data!) } dispatch_async(dispatch_get_main_queue()){ imageView.image = image } } } 

जब मैं डिबग करने की कोशिश कर रहा था, जब यह डिस्पैच_असिनक (डाउनलोड क्यू्यू) की बात आती है, तो यह फ़ंक्शन को बाहर कूदता है कोई उपाय? धन्यवाद

वेब के समाधान से एकत्रित समाधान "स्विफ्ट एसिंक लोड छवि"

स्विफ्ट 3 अपडेट किए गए कोड:

 extension UIImageView { public func imageFromServerURL(urlString: String) { URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in if error != nil { print(error) return } DispatchQueue.main.async(execute: { () -> Void in let image = UIImage(data: data!) self.image = image }) }).resume() }} 

स्विफ्ट 2.2 कोड:

  extension UIImageView { public func imageFromServerURL(urlString: String) { NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in if error != nil { print(error) return } dispatch_async(dispatch_get_main_queue(), { () -> Void in let image = UIImage(data: data!) self.image = image }) }).resume() }} 

अब जहाँ भी आपको आवश्यक है, सर्वर यूआरएल से छवि को लोड करने के लिए ऐसा करें:

UIImageView.imageFromServerURL ("यहां सर्वर यूआरएल")।

सरल !

Swift3 में extension का उपयोग करें नेटवर्क समस्या को हल करने के लिए मैं आपको NSCache उपयोग करने की सलाह देता NSCache :

 import UIKit let imageCache = NSCache<NSString, AnyObject>() extension UIImageView { func loadImageUsingCache(withUrl urlString : String) { let url = URL(string: urlString) self.image = nil // check cached image if let cachedImage = imageCache.object(forKey: urlString as NSString) as? UIImage { self.image = cachedImage return } // if not, download image from url URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in if error != nil { print(error!) return } DispatchQueue.main.async { if let image = UIImage(data: data!) { imageCache.setObject(image, forKey: urlString as NSString) self.image = image } } }).resume() } } 

आशा है कि यह मदद करो!

शोभार तिवारी के उत्तर से आगे बढ़ते हुए, मुझे लगता है कि इन मामलों में अक्सर त्रुटि के मामले में एक डिफ़ॉल्ट छवि है, और लोड करने के उद्देश्य से, इसलिए मैंने इसे एक वैकल्पिक डिफ़ॉल्ट छवि शामिल करने के लिए अपडेट किया है:

स्विफ्ट 3

 extension UIImageView { public func imageFromServerURL(urlString: String, defaultImage : String?) { if let di = defaultImage { self.image = UIImage(named: di) } URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in if error != nil { print(error ?? "error") return } DispatchQueue.main.async(execute: { () -> Void in let image = UIImage(data: data!) self.image = image }) }).resume() } } 

यहां ये कोड आपकी मदद कर सकता है

  let cacheKey = indexPath.row if(self.imageCache?.objectForKey(cacheKey) != nil){ cell.img.image = self.imageCache?.objectForKey(cacheKey) as? UIImage }else{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { if let url = NSURL(string: imgUrl) { if let data = NSData(contentsOfURL: url) { let image: UIImage = UIImage(data: data)! self.imageCache?.setObject(image, forKey: cacheKey) dispatch_async(dispatch_get_main_queue(), { cell.img.image = image }) } } }) } 

इस छवि को डाउनलोड करने और टेबल व्यू स्क्रॉल के बिना कैश को कैश करेंगे

यह समाधान अनावश्यक छवि अपडेट के बिना वास्तव में तेजी से स्क्रॉल करना है आपको हमारे सेल क्लास में यूआरएल प्रॉपर्टी जोड़नी है:

 class OfferItemCell: UITableViewCell { @IBOutlet weak var itemImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! var imageUrl: String? } 

और एक्सटेंशन जोड़ें:

 import Foundation import UIKit let imageCache = NSCache<AnyObject, AnyObject>() let imageDownloadUtil: ImageDownloadUtil = ImageDownloadUtil() extension OfferItemCell { func loadImageUsingCacheWithUrl(urlString: String ) { self.itemImageView.image = nil if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage { self.itemImageView.image = cachedImage return } DispatchQueue.global(qos: .background).async { imageDownloadUtil.getImage(url: urlString, completion: { image in DispatchQueue.main.async { if self.imageUrl == urlString{ imageCache.setObject(image, forKey: urlString as AnyObject) self.itemImageView.image = image } } }) } } } 

आप इसे सुधार भी सकते हैं और कुछ कोड को एक और अधिक सामान्य सेल वर्ग से निकाल सकते हैं अर्थात कस्टमसेल विथ इमेज इसे अधिक पुन: प्रयोज्य बनाने के लिए।