     }
 }
 
-public struct PermissionResult: Printable {
+@objc public class PermissionResult: NSObject {
     public let type: PermissionType
     public let status: PermissionStatus
     public let demands: PermissionDemands
 
-    public var description: String {
+    private init(type:PermissionType, status:PermissionStatus, demands:PermissionDemands) {
+        self.type = type
+        self.status = status
+        self.demands = demands
+    }
+    
+    override public var description: String {
         return "\(type.rawValue) \(status.rawValue)"
     }
 }

        if let disabledOrDeniedClosure = self.disabledOrDeniedClosure {
            disabledOrDeniedClosure(self.getResultsForConfig())
        }
        var alert = UIAlertController(title: "\(permission.rawValue) is currently disabled.",
            message: "Please enable access to \(permission.rawValue) in Settings",
            preferredStyle: .Alert)
        alert.addAction(UIAlertAction(title: "OK",
            style: .Cancel,

        // this is a bit of a mess, eh?
        switch type {
        case .LocationAlways, .LocationInUse:
            button.setTitle("Enable \(type.prettyName())".localized.uppercaseString, forState: UIControlState.Normal)
        default:
            button.setTitle("Allow \(type.stringValue())".localized.uppercaseString, forState: UIControlState.Normal)
        }
        
        button.addTarget(self, action: Selector("request\(type.stringValue())"), forControlEvents: UIControlEvents.TouchUpInside)
        
        return button
    }
