         }
     }
     
-    var dragEntered: Bool? {
+    var dragEntered: Bool {
         get {
-            return (objc_getAssociatedObject(self, &AssociatedKeys.dragEntered) as? Bool)!
+            return AssociatedKeys.dragEntered
         }
         
         set {
-            if let newValue = newValue {
-                objc_setAssociatedObject(
-                    self,
-                    &AssociatedKeys.dragEntered,
-                    newValue as Bool,
-                    .OBJC_ASSOCIATION_RETAIN_NONATOMIC
-                )
-            }
-        }
-    }
-    
-    var dragExited: Bool? {
+                AssociatedKeys.dragEntered = newValue
+        }
+    }
+    
+    var dragExited: Bool {
         get {
-            return (objc_getAssociatedObject(self, &AssociatedKeys.dragExited) as? Bool)!
+            return AssociatedKeys.dragExited
         }
         
         set {
-            if let newValue = newValue {
-                objc_setAssociatedObject(
-                    self,
-                    &AssociatedKeys.dragExited,
-                    newValue as Bool,
-                    .OBJC_ASSOCIATION_RETAIN_NONATOMIC
-                )
-            }
+                AssociatedKeys.dragExited = newValue
         }
     }
 }

extension UIView {
    private struct AssociatedKeys {
        static var uniqueID:String? = nil
        static var dragEntered:Bool? = false
        static var dragExited:Bool? = false
    }
    
    var uniqueID: String? {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.uniqueID) as? String
        }
        
        set {
            if let newValue = newValue {
                objc_setAssociatedObject(

}

func getViewByUniqueID(containingView:UIView, anID:String) ->UIView?{
    
    let filteredSubviews = containingView.subviews.filter(){$0.uniqueID == anID}
    if filteredSubviews.count > 0{
        return filteredSubviews[0]
