             return false
         }
         
-        let attributeType = attributeDescription?.attributeType
-        
-        // no JSON conversion for these values
-        if attributeType == NSAttributeType.UndefinedAttributeType || attributeType == NSAttributeType.ObjectIDAttributeType {
-                
+        switch attributeDescription!.attributeType {
+            
+        case NSAttributeType.UndefinedAttributeType, NSAttributeType.ObjectIDAttributeType:
             return false
-        }
-        
-        // number types
-        if attributeType == NSAttributeType.Integer16AttributeType || attributeType == NSAttributeType.Integer32AttributeType || attributeType == NSAttributeType.Integer64AttributeType || attributeType == NSAttributeType.DecimalAttributeType || attributeType == NSAttributeType.DoubleAttributeType || attributeType == NSAttributeType.FloatAttributeType || attributeType == NSAttributeType.BooleanAttributeType {
+            
+        case NSAttributeType.Integer16AttributeType, NSAttributeType.Integer32AttributeType, NSAttributeType.Integer64AttributeType, NSAttributeType.DecimalAttributeType, NSAttributeType.DoubleAttributeType, NSAttributeType.FloatAttributeType, NSAttributeType.BooleanAttributeType :
             
             // try to cast as number
-            
             let number = convertedValue as? NSNumber
-            
             return (number != nil)
-        }
-        
-        // string type
-        if attributeType == NSAttributeType.StringAttributeType {
+            
+        case NSAttributeType.StringAttributeType:
             
             let string = convertedValue as? String
-            
             return (string != nil)
-        }
-        
-        // date type
-        if attributeType == NSAttributeType.DateAttributeType {
+            
+        case NSAttributeType.DateAttributeType:
             
             let date = convertedValue as? NSDate
-            
             return (date != nil)
-        }
-        
-        // data type
-        if attributeType == NSAttributeType.BinaryDataAttributeType {
+            
+        case NSAttributeType.BinaryDataAttributeType:
             
             let data = convertedValue as? NSData
-            
             return (data != nil)
-        }
-        
+            
         // transformable value type
-        if attributeType == NSAttributeType.TransformableAttributeType {
+        case NSAttributeType.TransformableAttributeType:
             
             // get transformer
             let valueTransformerName = attributeDescription?.valueTransformerName

        
        let attributeClassName = attributeDescription!.attributeValueClassName
        
        // strings and numbers are standard json data types
        if attributeClassName == "NSString" || attributeClassName == "NSNumber" {
            
            return attributeValue
        }
        
        // date
        if attributeClassName == "NSDate" {
            
            
        }
        
        // transformable value type
        if attributeType == NSAttributeType.TransformableAttributeType {
            
            // get transformer
            let valueTransformerName = attributeDescription?.valueTransformerName

            
            // custom transformer
            let transformer = NSValueTransformer(forName: valueTransformerName!)
        }
        
        return nil
    }
    
    func attributeValueForJSONCompatibleValue(JSONCompatibleValue: AnyObject, forAttribute attributeName: String) -> AnyObject? {
