这是我的方法:
- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ...;
- (void)justFormatThings:(NSString *)format, ...;
- (void)passDouble:(double)aDouble andFormatThings:(NSString *)format, ...;
- (void)passFloat:(float)aFloat andInt:(int)anInt andFormatThings:(NSString *)format, ...;
我想要做的是将my方法中的参数(包括format
和...
)传递给这样的方法:
- (void)formatThings:(NSString *)format, ... {
// analysis var list and print formatted string
}
我尝试将va_list
传递给第二种方法,但是我收到了错误。
答案 0 :(得分:0)
用以下代码替换您的代码......
- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ... {
if (aSelector != NULL &&
[self respondsToSelector:aSelector]) {
[self performSelector:aSelector];
}
// call - justFormatThings:
[self justFormatThings:anyString];
}
- (void)justFormatThings:(NSString *)format, ... {
// code...
}
答案 1 :(得分:0)
- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ... {
if (aSelector != NULL &&
[self respondsToSelector:aSelector]) {
[self performSelector:aSelector];
}
// call - justFormatThings:
[self justFormatThings:format];
}
- (void)justFormatThings:(NSString *)format, ... {
// code...
}
答案 2 :(得分:0)
我会简化这个。
有多种方法可以将参数从函数传递到另一个函数。
1-从方法1开始,您可以像下面这样调用方法:
[self justFormatThings:@"you string"];
这样你的函数会随时调用第二个函数。
2-您在.h中声明了一个字符串属性,并在您的课程中随时使用它。
例如,您在.h中声明NSString *myString;
然后访问它并从两种方法中编辑/读取它。
希望这有帮助!
答案 3 :(得分:0)
可能这段代码很有帮助。
- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ...
{
if (aSelector != NULL && [self respondsToSelector:aSelector])
{
[self performSelector:aSelector];
}
NSMutableArray *arr = [[NSMutableArray alloc] init];
//store variable argument string in array
va_list args;
va_start(args, format);
for (NSString *arg = format; arg != nil; arg = va_arg(args, NSString*))
{
[arr addObject:arg];
}
va_end(args);
NSLog(@"%@",arr);
// call - justFormatThings:
[self justFormatThings:[arr componentsJoinedByString:@","],nil];
}
- (void)justFormatThings:(NSString *)format, ...
{
NSMutableArray *arr = [[NSMutableArray alloc] init];
//store variable argument string in array
va_list args;
va_start(args, format);
for (NSString *arg = format; arg != nil; arg = va_arg(args, NSString*))
{
[arr addObject:arg];
}
va_end(args);
NSLog(@"%@",arr);
}
-(void)tempMethod
{
NSLog(@"Temp Method");
}
您可以致电doSomething:andFormatThings:
,如:
- (void)viewDidLoad
{
[super viewDidLoad];
[self doSomething:@selector(tempMethod) andFormatThings:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];
}