AFAIK ObjectiveC (giống như C và C++) không cung cấp cho bạn cú pháp cho phép bạn trực tiếp nghĩ gì.
Cách giải quyết thông thường là tạo hai phiên bản của hàm. Một trong đó có thể được gọi trực tiếp bằng cách sử dụng ... và một số khác được gọi bởi các hàm khác chuyển các tham số dưới dạng một va_list.
..
[obj aMethod:@"test this %d parameter", 1337);
[obj anotherMethod:@"test that %d parameter", 666);
..
-(void) aMethod:(NSString *)a, ...
{
va_list ap;
va_start(ap, a);
[self anotherMethod:a withParameters:ap];
va_end(ap);
}
-(void) anotherMethod:(NSString *)a, ...
{
va_list ap;
va_start(ap, a);
[self anotherMethod:a withParameters:ap];
va_end(ap);
}
-(void) anotherMethod:(NSString *)a withParameters:(va_list)valist
{
NSLog([[[NSString alloc] initWithFormat:a arguments:valist] autorelease]);
}
Có bộ nhớ gọn gàng trong -anotherMethod: withParameters: Bạn cần phải thêm tự động trả tiền cho [[NSString alloc] init] –
true and corrected @Bill – Till
Tuyệt vời! Tôi muốn vượt qua một danh sách các biến đối số để predicateWithFormat: và sau khi bạn đề xuất điều này, tôi nhận ra Apple đã thực sự cung cấp một biến vị ngữWithFormat: arguments: tương đương mà tôi đã không nhận thấy trước đó. – ArtOfWarfare