ios - ARC 不允许将 'BOOL'(又名 'bool')隐式转换为 'id'

标签 ios objective-c restkit

我正在尝试将 Pending/Completed 值转换为 bool 值 True/False

代码如下:

RKValueTransformer *transformer = [RKBlockValueTransformer valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class sourceClass, __unsafe_unretained Class destinationClass) {
        return ([sourceClass isSubclassOfClass:[NSNumber class]]);
    } transformationBlock:^BOOL(NSNumber *inputValue, __autoreleasing id *outputValue, __unsafe_unretained Class outputClass, NSError *__autoreleasing *error) {
        // validate the input
        RKValueTransformerTestInputValueIsKindOfClass(inputValue, [NSNumber class], error);
        if([inputValue isEqualToNumber:@(Completed)]) {
            *outputValue = YES;
        } else if([inputValue isEqualToNumber:@(Pending)]){
            *outputValue = FALSE;
        }
        return YES;
    }];

但是,我收到错误:ARC 不允许将“BOOL”(又名“bool”)隐式转换为“id”

当我尝试将 outputValue 设置为 YES 时...

这是怎么回事?

它应该匹配这个输出:

{ 
   “IsCompleted”: true (nullable),
   “Desc”: null (“new description” on edit) 
}

最佳答案

transformationBlock接受一个输入对象,需要输出一个不同的对象,但是BOOL是一个内在类型,不是对象类型,所以不能设置*output 到一个直接的 bool 值。

你可以将它设置为一个NSNumber 对象来包装 bool 值 -

*output=[NSNumber numberWithBool:YES]; 

或者使用速记

*output=@YES;

关于ios - ARC 不允许将 'BOOL'(又名 'bool')隐式转换为 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797152/

相关文章:

ios - 弹出窗口推送时改变 TintColor

ios - 在 Objective C 中检查一个数组是否包含另一个数组的对象

objective-c - RestKit - POST 响应对象映射

iphone - iOS - 架构 armv7 的 2 个重复符号

iphone - RestKit 0.20使用nsdata发布数组Json

ios - 多次使用配置文件

ios - 如果变量已声明,则 swift 变量类型在向下转换后不会改变?

objective-c - 为 iOS 编写格式化输出

android - 仅使用 "web app"方法将 Firebase 添加到我的 Cordova 应用程序是否可行?

iphone - iOS UITableView索引是透明的