2016-09-18 6 views
9

मैं वर्तमान में स्विफ्ट 3.0 में अपग्रेड करता हूं, मैं नीचे काम करने के लिए एनएससीएच प्राप्त करने में सक्षम नहीं हूं, जो वर्तमान में मेरे पास है। मुझे कुछ भी नहीं दिख रहा है मैं लापता हूं मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। अग्रिमस्विफ्ट 3 NSCache काम नहीं करता

class myClass { 
    let imageCache = NSCache() 

    func downloadImageByUserId(userId:String,imageView:UIImageView){ 

     print(userId) 
     fireBaseAPI().childRef("version_one/frontEnd/users/\(userId)").observeEventType(.Value, withBlock: {snapshot in 
      let imageUrl = snapshot.value!["profileImageUrl"] as! String 

      // check image cache 
      print(self.imageCache.objectForKey(imageUrl)) 
      if let cacheImage = self.imageCache.objectForKey(imageUrl) as? UIImage{ 
       print("image cache") 
       imageView.image = cacheImage 
       return 
      } 
      print("image not cache") 
      //retrieve image 
      let url = NSURL(string: imageUrl) 

      NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, resposn, error) in 
       if error != nil { 
        print(error) 
        return 
       } 

       dispatch_async(dispatch_get_main_queue(),{ 
        if let downloadImage:UIImage = UIImage(data: data!){ 
         self.imageCache.setObject(downloadImage, forKey: imageUrl) 
         imageView.image = downloadImage 
        } 
       }) 

      }).resume() 
     }) 
    } 
} 
+2

आप यकीन है कि यह स्विफ्ट 3 से पहले काम कर रहे हैं:

यह तेज Dictionary तरह काम करता है, तो आप Key और Value प्रकार देने के लिए की आवश्यकता है? जब तक कि मैं गलत नहीं हूं, आप अपनी विधि कहने पर हर बार 'छवि imageCache = NSCache()' में एक नया * खाली * कैश बना रहे हैं। –

+0

@MartinR मैंने विधि के बाहर 'imageCache = NSCache()' को चेक और रख दिया। यह केवल कैश काम की तरह दिखता है जब यह 'NSUrlSession' के अंदर होता है, तब यह 'शून्य' बन जाता है, मुझे यकीन नहीं है कि' .resume' के साथ कुछ भी करने के लिए है। कृपया संशोधित प्रश्न देखें। – pprevalon

उत्तर

27

NSCache स्विफ्ट 3.0 में अधिक स्विफ्ट है।

let imageCache = NSCache<NSString, UIImage>()