मैं वेब से अपने आईओएस ऐप पर अपलोड की गई तस्वीरों के लिए कैश के रूप में उपयोग करने के लिए एक सिंगलटन को कार्यान्वित करने का प्रयास कर रहा हूं। मैंने नीचे दिए गए कोड में तीन प्रकार संलग्न किए हैं। मैंने संस्करण 2 काम करने की कोशिश की लेकिन यह एक कंपाइलर त्रुटि उत्पन्न कर रहा है जिसे मैं समझ नहीं पा रहा हूं और मैं क्या गलत कर रहा हूं इस पर सहायता प्राप्त करना चाहता हूं। संस्करण 1 कैशिंग करता है लेकिन मुझे वैश्विक चर के उपयोग को पसंद नहीं है। संस्करण 3 वास्तविक कैशिंग नहीं करता है और मेरा मानना है कि ऐसा इसलिए है क्योंकि मुझे var ic = .... के असाइनमेंट में प्रतिलिपि मिल रही है, क्या यह सही है?स्विफ्ट में सिंगलटन
कोई भी प्रतिक्रिया और अंतर्दृष्टि की सराहना की जाएगी।
धन्यवाद, जेड vi
import UIKit
private var imageCache: [String: UIImage?] = [String : UIImage?]()
class ImageCache {
class var imageCache: [String : UIImage?] {
struct Static {
static var instance: [String : UIImage?]?
static var token: dispatch_once_t = 0
}
dispatch_once(&Static.token) {
Static.instance = [String : UIImage?]()
}
return Static.instance!
}
}
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = UIImage(data: NSData(contentsOfURL: NSURL(string: "http://images.apple.com/v/iphone-5s/gallery/a/images/download/photo_1.jpg")!)!)
//variant 1 - this code is working
imageCache["photo_1"] = imageView.image
NSLog(imageCache["photo_1"] == nil ? "no good" : "cached")
//variant 2 - causing a compiler error on next line: '@lvalue $T7' is not identical to '(String, UIImage?)'
//ImageCache.imageCache["photo_1"] = imageView.image
//NSLog(ImageCache.imageCache["photo_1"] == nil ? "no good" : "cached")
//variant 3 - not doing the caching
//var ic = ImageCache.imageCache
//ic["photo_1)"] = imageView.image
//NSLog(ImageCache.imageCache["photo_1"] == nil ? "no good" : "cached")
}
}
तुम क्यों प्रयोग कर रहे हैं '[स्ट्रिंग:? UIImage]' बजाय 'की [स्ट्रिंग : UIImage] '? मुझे लगता है कि शायद आपके पास होने वाली परेशानी का स्रोत है। –
ध्यान दें कि आप 'dispatch_once' उपयोग करने की आवश्यकता नहीं है - पढ़ [यहां] (http://stackoverflow.com/a/26376288/148357) – Antonio
सिर्फ FTR, DLImageLoader एक अविश्वसनीय कैशिंग पुस्तकालय है, और स्विफ्ट में है। यह अमूल्य ... – Fattie