【问题标题】:Passing method names as objective-c arguments?将方法名称作为objective-c参数传递?
【发布时间】:2014-07-14 01:02:50
【问题描述】:

更新:我知道我的解决方案不起作用。我正在寻找解决此问题的替代方法:)

代码: public gist

我正在尝试创建一个 API 类,该类为 restkit 构建一些常用方法,以便我可以重用相同的代码来将对象和 POST、GET 或 PUT 映射到我的 Web API。当 API 类被实例化时,我调用 responseDescriptorWithMapping,并传递一系列参数,如下所示。

在我尝试将方法名称作为参数传递之前,这一切正常。

例如:

_api = [[snapApi alloc] initWithconfigureRestKit:[Profile class] objectMapping:@{ @"_id": @"_id", @"headline": @"headline" } httpMethod:@"RKRequestMethodPOST"];

我在运行时看到此警告和后续失败:

Incompatible pointer to integer conversion sending '__strong id' to parameter of type 'RKRequestMethod' (aka 'enum RKRequestMethod')

restkit 方法被定义为获取 RKRequestMethod 类的一个对象。是否可以使用 Objective-c 将方法名称(以字符串的形式)作为参数传递给函数?如果不是,我该如何动态地做到这一点?

(instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                   method:(RKRequestMethod)method
                              pathPattern:(NSString *)pathPattern
                                  keyPath:(NSString *)keyPath
                              statusCodes:(NSIndexSet *)statusCodes

提前致谢。

【问题讨论】:

    标签: objective-c methods arguments restkit


    【解决方案1】:

    RKRequestMethod 被定义为位掩码而不是类,因此您不能真正将字符串作为方法参数传递,(即 `@"RKRequestMethodPOST"' 不起作用)

    typedef NS_OPTIONS(NSInteger, RKRequestMethod) {
        RKRequestMethodGET          = 1 << 0,
        RKRequestMethodPOST         = 1 << 1,
        RKRequestMethodPUT          = 1 << 2,
        RKRequestMethodDELETE       = 1 << 3,
        RKRequestMethodHEAD         = 1 << 4,
        RKRequestMethodPATCH        = 1 << 5,
        RKRequestMethodOPTIONS      = 1 << 6,
        RKRequestMethodAny          = (RKRequestMethodGET |
                                       RKRequestMethodPOST |
                                       RKRequestMethodPUT |
                                       RKRequestMethodDELETE |
                                       RKRequestMethodHEAD |
                                       RKRequestMethodPATCH |
                                       RKRequestMethodOPTIONS)
    };
    

    【讨论】:

    • 谢谢。我可以看到它不适用于上面发布的错误。有没有其他选择?
    • 我看到了 2 个选项,要么编写自己的方法将 NSString 转换为 RKRequestMethod 枚举,要么在 initWithconfigureRestKit:(id)object objectMapping:(NSDictionary *)dictionary httpMethod:(RKRequestMethod)method 方法中传递 RKRequestMethod 枚举。
    • 传递枚举值是合适的方法
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2014-02-09
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2010-10-05
    相关资源
    最近更新 更多