     public let type: MethodType
     
     /// A String describing the method's return type
-    public var returnType: String {
-        return String(cString: method_copyReturnType(_method))
+    public var returnType: ObjCTypeEncoding {
+        return ObjCTypeEncoding(rawValue: String(cString: method_copyReturnType(_method)))!
     }
     
     /// Number of arguments accepted by the method

    }
    
    /// An object's class methods
    public static var classMethods: [ObjCMethod] {
        var count: UInt32 = 0
        let methodList = class_copyMethodList(object_getClass(self), &count)
        
        return ObjCMethodArrayFromMethodList(methodList, count, .class)
    }
}

fileprivate func ObjCMethodArrayFromMethodList(_ methodList: UnsafeMutablePointer<Method?>?, _ count: UInt32, _ methodType: MethodType) -> [ObjCMethod] {
    var methods = [ObjCMethod]()
    
    for i in 0..<count {
        guard let method = methodList.unsafelyUnwrapped[Int(i)] else { continue }
        
        methods.append(ObjCMethod(method, type: methodType))
    }
    
    return methods


public extension NSObject {
    /// An object's instance methods
    public static var instanceMethods: [ObjCMethodInfo] {
        var count: UInt32 = 0
        let methodList = class_copyMethodList(self.classForCoder(), &count)
        
