我正在尝试将Pending / Completed的值转换为布尔值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;
}];
但是,我收到错误:Implicit Conversion of 'BOOL'(aka 'bool') to 'id' is disallowed by ARC
当我尝试将outputValue设置为YES ...
时这里发生了什么?
它应匹配此输出:
{
“IsCompleted”: true (nullable),
“Desc”: null (“new description” on edit)
}
答案 0 :(得分:14)
transformationBlock
接受输入对象并需要输出不同的对象,但BOOL是内部类型,而不是对象类型,因此您无法将*output
设置为直接布尔值值。
您可以将其设置为包含布尔值的NSNumber
对象 -
*output=[NSNumber numberWithBool:YES];
或使用简写
*output=@YES;