Objective c 为什么不是';这种打印方法行得通吗?
当我使用Objective c 为什么不是';这种打印方法行得通吗?,objective-c,printf,nslog,Objective C,Printf,Nslog,当我使用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 {
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;
}
#导入
#定义为BJ(v)[NSNumber-numberWithInteger:v]
@接口NSSet(打印)
-(作废)打印;
@结束
@实现NSSet(打印)
-(作废)打印{
for(自身中的NSNumber*元素)
printf(“%li”,(长)[元素整数值];
}
@结束
int main(int argc,char*argv[]){
@自动释放池{
NSMutableSet*setA=[NSMutableSet setWithObjects:INTOBJ(3)、INTOBJ(10)、INTOBJ(1)、INTOBJ(5)、nil];
[setA打印];
}
返回0;
}
NSLog本质上是printf的一个不同版本,它允许使用Objective C材料,而printf不能处理Objective C材料
如果您的printf方法不起作用,这可能就是问题所在。尝试
-longValue
而不是-integerValue
它应该隐式转换它们,但您永远不知道…首先将对象NSNumber转换为NSInteger,然后您可以使用printf语句输出到控制台,所有的整数都应该出现在一行上
#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;
}
我假设你想在iOS设备上运行这个,对吗?如果您在模拟器中运行,
printf
也应该可以工作。这里也回答了这个问题:[[1]:不。他正确地获取了值-但不是正确的值。OP已经在这样做了,甚至正在使用正确的方法获取一个NSInteger
:integerValue
intValue
返回一个int
。