दिलचस्प पोस्ट
मैं जावास्क्रिप्ट में एक संख्या को कैसे गोल करूं? जावा एप्लिकेशन में जेटीबल ऑब्जेक्ट कैसे मुद्रित करें I JFrame के लिए पृष्ठभूमि का रंग सेट करना दो जावा वस्तुओं की तुलना कैसे करें Loops में sscanf कैसे उपयोग करें? परिमित ऑटोमेटा के लिए नियमित अभिव्यक्ति की आवश्यकता: यहां तक ​​कि 1 एस की संख्या और 0 की संख्या भी उपकरण आवंटन उपयोगकर्ता परिभाषित वर्गों के ऑब्जेक्ट और डेलोक को ट्रैक करते हैं एल्गोरिथ्म दो की छोटी शक्ति पाने के लिए जो किसी दिए गए मान के बराबर या बराबर है सरणी, ढेर और ढेर और मूल्य प्रकार Iframe और मूल साइट के बीच कैसे संपर्क करें? उद्देश्य-सी में संपत्ति को रिहा करने के लिए मुझे गेटर का उपयोग क्यों नहीं करना चाहिए? Grails डेटा स्रोत कॉन्फ़िगरेशन को अनन्य करें एंड्रॉइड – लंबे समय से एसएमएस (बहुभाषी) प्राप्त करना JavaScript DOMParser आंतरिक एचटीएमएल और अन्य गुणों का उपयोग करता है क्या आप को.एपली कॉल कर सकते हैं आंशिक दृश्य को बाइंडिंग करने के लिए?

स्विफ्ट पर URL से छवि को लोड करना / डाउनलोड करना

मैं अपने आवेदन में यूआरएल से एक छवि लोड करना चाहता हूं, इसलिए मैंने पहली बार उद्देश्य-सी के साथ कोशिश की और यह स्विफ्ट के साथ काम किया, मेरे पास एक संकलन त्रुटि है:

'छवि के साथ डेटा' अनुपलब्ध है: वस्तु निर्माण का उपयोग करें 'UIImage (डेटा :)'

मेरा कार्य:

@IBOutlet var imageView : UIImageView override func viewDidLoad() { super.viewDidLoad() var url:NSURL = NSURL.URLWithString("http://img.hiwab.com/ios/ios8.png") var data:NSData = NSData.dataWithContentsOfURL(url, options: nil, error: nil) imageView.image = UIImage.imageWithData(data)// Error here } 

उद्देश्य-सी में:

 - (void)viewDidLoad { [super viewDidLoad]; NSURL *url = [NSURL URLWithString:(@"http://img.hiwab.com/ios/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"; } 

क्या कोई कृपया मुझे समझाएगा कि imageWithData: स्विफ्ट के साथ काम नहीं करती है, और मैं इस समस्या को कैसे हल कर सकता हूं।

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

Xcode 8 • स्विफ्ट 3

तुल्यकालिक:

 if let filePath = Bundle.main.path(forResource: "imageName", ofType: "jpg"), let image = UIImage(contentsOfFile: filePath) { imageView.contentMode = .scaleAspectFit imageView.image = image } 

अतुल्यकालिक रूप से:

अपने url से छवि डेटा प्राप्त करने के लिए एक पूर्णता वाले हैंडलर के साथ एक विधि बनाएं

 func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) { URLSession.shared.dataTask(with: url) { data, response, error in completion(data, response, error) }.resume() } 

छवि को डाउनलोड करने के लिए एक विधि बनाएं (कार्य शुरू करें)

 func downloadImage(url: URL) { print("Download Started") getDataFromUrl(url: url) { data, response, error in guard let data = data, error == nil else { return } print(response?.suggestedFilename ?? url.lastPathComponent) print("Download Finished") DispatchQueue.main.async() { self.imageView.image = UIImage(data: data) } } } 

उपयोग:

 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. print("Begin of code") if let url = URL(string: "http://img.hiwab.com/ios/og.png") { imageView.contentMode = .scaleAspectFit downloadImage(url: url) } print("End of code. The image will continue downloading in the background and it will be loaded when it ends.") } 

विस्तार :

  extension UIImageView { func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleAspectFit) { contentMode = mode URLSession.shared.dataTask(with: url) { data, response, error in 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() { self.image = image } }.resume() } func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) { guard let url = URL(string: link) else { return } downloadedFrom(url: url, contentMode: mode) } } 

उपयोग:

 imageView.downloadedFrom(link: "http://img.hiwab.com/ios/og.png") 

(स्विफ्ट 3 अपडेट) स्विफ्ट ने पहले जवाब के बाद से थोड़ा बदल दिया। सरल तरीका:

 let url = URL(string: image.url) let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch imageView.image = UIImage(data: data!) 

संपादित करें :

यदि आप कोड को async चलाने के लिए चाहते हैं, तो आप इसे आसानी से GCD के साथ प्राप्त कर सकते हैं:

 let url = URL(string: image.url) DispatchQueue.global().async { let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch DispatchQueue.main.async { imageView.image = UIImage(data: data!) } } 

अगर आप बस छवि लोड करना चाहते हैं (एसिंक्रोनस!) – बस अपने स्विफ्ट कोड में यह छोटा एक्सटेंशन जोड़ें:

 extension UIImageView { public func imageFromUrl(urlString: String) { if let url = NSURL(string: urlString) { let request = NSURLRequest(URL: url) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in if let imageData = data as NSData? { self.image = UIImage(data: imageData) } } } } } 

और इसे इस तरह प्रयोग करें:

 myImageView.imageFromUrl("http://img.hiwab.com/ios/123.png") 

स्विफ्ट 2.2 || Xcode 7.3

मुझे अद्भुत परिणाम मिल गया !! AlamofireImage स्विफ्ट लाइब्रेरी के साथ

यह कई विशेषताएं प्रदान करता है जैसे:

  • असिंक्रोनस डाउनलोड करें
  • ऑटो चेतावनी कैशिंग छवि कैश अगर मेमोरी चेतावनी ऐप के लिए होती है
  • छवि URL कैशिंग
  • छवि कैशिंग
  • डुप्लिकेट डाउनलोड से बचें

और अपने ऐप के लिए लागू करने में बहुत आसान है

चरण 1 स्थापित पॉड्स


अलामोफर 3.3.x

पॉड 'अलामफर'

अलामॉफ़िर इमेज 2.4.x

पॉड 'अलामॉफ़र इमेज'

चरण 2. आयात और उपयोग करें

 import Alamofire import AlamofireImage let downloadURL = NSURL(string: "http://cdn.sstatic.net/Sites/stackoverflow/company/Img/photos/big/6.jpg?v=f4b7c5fee820")! imageView.af_setImageWithURL(downloadURL) 

बस!! यह सब कुछ ध्यान रखेगा


आलमफायर लोगों के लिए महान धन्यवाद, iDevelopers जीवन को आसान बनाने के लिए;)

Xcode 8स्विफ्ट 3

लियो Dabus का जवाब बढ़िया है! मैं सिर्फ एक सब-इन-वन फ़ंक्शन समाधान प्रदान करना चाहता था:

 let url = URL(string: "http://img.hiwab.com/ios/og.png") let task = URLSession.shared.dataTask(with: url!) { data, response, error in guard let data = data, error == nil else { return } DispatchQueue.main.sync() { self.imageView.image = UIImage(data: data) } } task.resume() 

मैंने एक एकल, पुन: प्रयोज्य वर्ग में UIImageView को विस्तारित करने के लिए सबसे अच्छा जवाब का कोड लिपटा है, ताकि आप सीधे अपने स्टोरीबोर्ड में एसिंक्रोनस लोडिंग UIImageViews (या उन्हें कोड से बना सकते हैं) का उपयोग कर सकते हैं।

यहां मेरा वर्ग है:

 import Foundation import UIKit class UIImageViewAsync :UIImageView { override init() { super.init(frame: CGRect()) } override init(frame:CGRect) { super.init(frame:frame) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func getDataFromUrl(url:String, completion: ((data: NSData?) -> Void)) { NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) { (data, response, error) in completion(data: NSData(data: data)) }.resume() } func downloadImage(url:String){ getDataFromUrl(url) { data in dispatch_async(dispatch_get_main_queue()) { self.contentMode = UIViewContentMode.ScaleAspectFill self.image = UIImage(data: data!) } } } } 

और यहां इसका उपयोग कैसे किया जाता है:

 imageView.downloadImage("http://img.hiwab.com/ios/myImage.jpg") 

एफवाईआई: स्विफ्ट -200 के लिए Xcode7.0 बीटा 2

 extension UIImageView { public func imageFromUrl(urlString: String) { if let url = NSURL(string: urlString) { let request = NSURLRequest(URL: url) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in self.image = UIImage(data: data!) } } } } 
 let url = NSURL.URLWithString("http://img.hiwab.com/ios/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) 

त्रुटि संभाल और कस्टम अनुरोध शीर्षलेख के साथ स्विफ्ट 2

बस UIImageView को एक्सटेंशन जोड़ें:

 extension UIImageView { public func imageFromUrl(urlString: String) { if let url = NSURL(string: urlString) { let request = NSMutableURLRequest(URL: url) request.setValue("<YOUR_HEADER_VALUE>", forHTTPHeaderField: "<YOUR_HEADER_KEY>") NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in guard let data = data where error == nil else{ NSLog("Image download error: \(error)") return } if let httpResponse = response as? NSHTTPURLResponse{ if httpResponse.statusCode > 400 { let errorMsg = NSString(data: data, encoding: NSUTF8StringEncoding) NSLog("Image download error, statusCode: \(httpResponse.statusCode), error: \(errorMsg!)") return } } dispatch_async(dispatch_get_main_queue(), { NSLog("Image download success") self.image = UIImage(data: data) }) }.resume() } } } 

और फिर, छवि डाउनलोड करने के लिए नई imageFromUrl(urlString: String) का उपयोग करें

उपयोग:

 imageView.imageFromUrl("http://img.hiwab.com/ios/ONaprQV.png") 

आप ऐसा करना चाहते हैं:

 UIImage(data: data) 

स्विफ्ट में, उन्होंने नियमित कन्स्ट्रक्टरों के साथ अधिकतर उद्देश्य सी कारखाने के तरीके बदल दिए हैं।

देख:

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-XID_26

स्विफ्ट 2.0:

1)

 if let url = NSURL(string: "http://etc...") { if let data = NSData(contentsOfURL: url) { imageURL.image = UIImage(data: data) } } 

या

 imageURL.image = NSURL(string: "http:// image name...") .flatMap { NSData(contentsOfURL: $0) } .flatMap { UIImage(data: $0) } 

2) इस विधि को वीसी या एक्सटेंशन के लिए जोड़ें।

 func load_image(urlString:String) { let imgURL: NSURL = NSURL(string: urlString)! let request: NSURLRequest = NSURLRequest(URL: imgURL) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) in if error == nil { self.image_element.image = UIImage(data: data) } } } 

उपयोग:

 self.load_image(" url strig here") 

स्विफ्ट 4

यह विधि एसिंक्रोनस की वेबसाइट से एक छवि डाउनलोड करेगी और इसे कैश करेगी:

  func getImageFromWeb(_ urlString: String, closure: @escaping (UIImage?) -> ()) { guard let url = URL(string: urlString) else { return closure(nil) } let task = URLSession(configuration: .default).dataTask(with: url) { (data, response, error) in guard error == nil else { print("error: \(String(describing: error))") return closure(nil) } guard response != nil else { print("no response") return closure(nil) } guard data != nil else { print("no data") return closure(nil) } DispatchQueue.main.async { closure(UIImage(data: data!)) } }; task.resume() } 

उपयोग में:

  getImageFromWeb("http://img.hiwab.com/ios/og.png") { (image) in if let image = image { let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) imageView.image = image self.view.addSubview(imageView) } // if you use an Else statement, it will be in background } 

ऐसी छवि को प्राप्त करने का एक तरीका जो सुरक्षित है और स्विफ्ट 2.0 और एक्स-कोड 7.1 के साथ काम करता है:

 static func imageForImageURLString(imageURLString: String, completion: (image: UIImage?, success: Bool) -> Void) { guard let url = NSURL(string: imageURLString), let data = NSData(contentsOfURL: url), let image = UIImage(data: data) else { completion(image: nil, success: false); return } completion(image: image, success: true) } 

फिर आप इस पद्धति को इस तरह कॉल करेंगे:

 imageForImageURLString(imageString) { (image, success) -> Void in if success { guard let image = image else { return } // Error handling here // You now have the image. } else { // Error handling here. } } 

यदि आप छवि के साथ दृश्य अपडेट कर रहे हैं, तो आपको "if success {" के बाद इसका उपयोग करना होगा:

  dispatch_async(dispatch_get_main_queue()) { () -> Void in guard let image = image else { return } // Error handling here // You now have the image. Use the image to update the view or anything UI related here // Reload the view, so the image appears } 

यदि आप UI में छवि का उपयोग कर रहे हैं, तो इस अंतिम भाग की आवश्यकता है, क्योंकि नेटवर्क कॉल्स को समय लगता है। यदि आप UI को ऊपर की तरह डिस्पैच_आसिंक के बिना फोन का उपयोग करने के लिए अपडेट करने का प्रयास करते हैं, तो कंप्यूटर छवि के लिए दिखेगा, जबकि छवि को अभी भी प्राप्त किया जा रहा है, यह पता लगाएं कि कोई छवि नहीं है (अभी तक), और आगे बढ़ें जैसे कोई छवि नहीं थी मिल गया। अपना कोड डिस्पैच_आसिनक समापन समापन के अंदर डालकर कंप्यूटर से कहता है, "जाओ, इस चित्र को प्राप्त करें और जब आप कर लें, तो इस कोड को पूरा करें।" इस तरह, आपके पास छवि होगी जब कोड कहा जाता है और चीजें अच्छी तरह से काम करेंगी

यदि आप बहुत ही सरल कार्यान्वयन की तलाश कर रहे हैं (यह स्विफ्ट 2 में मेरे लिए काम किया था)

  let imageURL = NSURL(string: "http://img.hiwab.com/ios/26078338233_d1466b7da2_m.jpg") let imagedData = NSData(contentsOfURL: imageURL!)! imageView?.image = UIImage(data: imagedData) 

मैंने एक कस्टम दृश्य के साथ तालिका दृश्य के भीतर कार्यान्वित किया है, जिसमें केवल एक छवि है

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cell = tableView.dequeueReusableCellWithIdentifier("theCell", forIndexPath: indexPath) as! customTableViewCell let imageURL = NSURL(string: "http://img.hiwab.com/ios/26078338233_d1466b7da2_m.jpg") let imagedData = NSData(contentsOfURL: imageURL!)! cell.imageView?.image = UIImage(data: imagedData) return cell } 

त्रुटि संभालने के साथ तेज 3

 let url = URL(string: arr[indexPath.row] as! String) if url != nil { DispatchQueue.global().async { let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch DispatchQueue.main.async { if data != nil { cell.imgView.image = UIImage(data:data!) }else{ cell.imgView.image = UIImage(named: "default.png") } } } } 

एक्सटेंशन के साथ

विस्तार UIImageView {

 func setCustomImage(_ imgURLString: String?) { guard let imageURLString = imgURLString else { self.image = UIImage(named: "default.png") return } DispatchQueue.global().async { let data = try? Data(contentsOf: URL(string: imageURLString)!) DispatchQueue.main.async { self.image = data != nil ? UIImage(data: data!) : UIImage(named: "default.png") } } } 

}

केवल चीजें हैं जो गायब हैं!

 let url = NSURL.URLWithString("http://img.hiwab.com/ios/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!) 

स्विफ्ट में इस कोड का उपयोग करें

 imageView.image=UIImage(data: NSData(contentsOfURL: NSURL(string: "http://img.hiwab.com/ios/ios8.png")!)! 

स्विफ्ट 2.x जवाब है कि छवि को डाउनलोड करने के लिए छवि (लियो डबस के जवाब के विपरीत, जो छवि को स्मृति में संग्रहीत करता है) लियो डबस के उत्तर के आधार पर और रोब के उत्तर से NSURL सत्र के डेटा प्राप्त करें Download TaskWithRequest पूरा संचालक से :

  // Set download vars let downloadURL = NSURL() // URL to download from let localFilename = "foobar.png" // Filename for storing locally // Create download request let task = NSURLSession.sharedSession().downloadTaskWithURL(downloadURL) { location, response, error in guard location != nil && error == nil else { print("Error downloading message: \(error)") return } // If here, no errors so save message to permanent location let fileManager = NSFileManager.defaultManager() do { let documents = try fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) let fileURL = documents.URLByAppendingPathComponent(localFilename) try fileManager.moveItemAtURL(location!, toURL: fileURL) self.doFileDownloaded(fileURL, localFilename: localFilename) print("Downloaded message @ \(localFilename)") } catch { print("Error downloading message: \(error)") } } // Start download print("Starting download @ \(downloadURL)") task.resume() // Helper function called after file successfully downloaded private func doFileDownloaded(fileURL: NSURL, localFilename: String) { // Do stuff with downloaded image } 

स्विफ्ट -3 और इसके बाद के संस्करण के लिए:

 extension UIImageView { public func imageFromUrl(urlString: String) { if let url = URL(string: urlString) { let request = URLRequest(url: url) NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: .main, completionHandler: { (response, data, error) in if let imageData = data as NSData? { self.image = UIImage(data: imageData as Data) } }) } } }