0

它在我使用时有效NSLog,但不是printf。我想使用printf,因为这样所有元素setA都将显示在一行中。

#import <Foundation/Foundation.h>

#define INTOBJ(v) [NSNumber numberWithInteger: v]

@interface NSSet (Printing) 
-(void) print;
@end

@implementation NSSet (Printing)
-(void) print {
    for (NSNumber *element in self) 
        printf("%li", (long) [element integerValue]);
}

@end

int main (int argc, char *argv[]) {
    @autoreleasepool {
        NSMutableSet *setA = [NSMutableSet setWithObjects:INTOBJ(3), INTOBJ(10), INTOBJ(1), INTOBJ(5), nil];

        [setA print];
    }
    return 0;
}
4

3 回答 3

0

NSLog 本质上是 printf 的不同版本,它允许使用 Objective C 的东西,而 printf 不能处理 Objective C 的材料。

如果您的 printf 方法不起作用,这可能是问题所在。

于 2012-08-01T18:40:54.360 回答
0

try-longValue而不是-integerValue它应该隐式地投射它们,但你永远不知道......

于 2012-08-01T18:56:51.820 回答
-1

首先从作为对象的 NSNumber 转换为 NSInteger,然后您可以使用 printf 语句输出到控制台,所有整数都应该出现在一行上。

for(NSNumber *element in setA)
{
    NSInteger num = [element intValue];
    printf("%li", (long)num);

}
于 2012-08-01T19:18:31.003 回答