     // MARK: - Image Cache Subscripting
     internal subscript (key: String) -> UIImage? {
         get {
-            return imageCacheEntryForKey(key)[ImageCacheKeys.image] as? UIImage
+            return imageCacheEntryForKey(key)[.image] as? UIImage
         }
         set {
             if let image = newValue {
                 var imageCacheEntry = imageCacheEntryForKey(key)
-                imageCacheEntry[ImageCacheKeys.image] = image
+                imageCacheEntry[.image] = image
                 setImageCacheEntry(imageCacheEntry, forKey: key)
                 
-                if let observerMapping = imageCacheEntry[ImageCacheKeys.observerMapping] as? [NSObject: Int] {
+                if let observerMapping = imageCacheEntry[.observerMapping] as? [NSObject: Int] {
                     for (observer, initialIndexIdentifier) in observerMapping {
                         switch observer {
                         case let imageView as UIImageView:

import WatchKit

// MARK: - ImageCacheKeys Struct
fileprivate struct ImageCacheKeys {
    static let image = "image"
    static let isDownloading = "isDownloading"
    static let observerMapping = "observerMapping"
}

// MARK: - KFImageCacheManager Class

    public static let shared = KFImageCacheManager()
    
    // {"url": {"img": UIImage, "isDownloading": Bool, "observerMapping": {Observer: Int}}}
    fileprivate var imageCache = [String: [ImageCacheKey: Any]]()
    
    internal lazy var session: URLSession = {
        let configuration = URLSessionConfiguration.default
