2010-11-05 39 views
4

即使它被聲明爲NSString而不是NSArray並且只有一個冒號,[NSString stringWithFormat:];也可以接受多個參數。格式爲方法參數的字符串(objective-c)

我怎麼能有這個爲我自己的方法,這就像NSLog的替代品寫入文本字段,所以它經常使用,我不想繼續添加更多的方括號。

回答

2

你的論點名稱後使用省略號:http://numbergrinder.com/node/35:從

- (NSNumber *) addValues:(int) count, ... 
{ 
    va_list args; 
    va_start(args, count); 

    NSNumber *value; 

    double retval; 

    for(int i = 0; i < count; i++) 
    { 
    value = va_arg(args, NSNumber *); 

    retval += [value doubleValue]; 

    } 

    va_end(args); 
    return [NSNumber numberWithDouble:retval]; 
} 

例子:

(NSNumber *) addValues:(int) count, ...; 

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocDefiningClasses.html

然後,您需要使用va_listva_start通過所提供的參數來迭代

請注意,這是一種內置的C功能,不屬於Objective-C的一部分;還有這裏的va_arg使用的一個很好的解釋:

http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html

+0

會怎麼做我用stringWithFormat做到這一點?說我想要一個名爲'titleWithFormat:' – 2010-11-05 20:05:53

+0

方法您的方法簽名將是 - (NSString *)titleWithFormat:(NSString *)格式,...; – GendoIkari 2010-11-05 20:18:05

+0

而我的第二個鏈接提供了使用while循環而不是for循環的示例,您可以使用它循環每個提供的參數。如果你想要的是和stringWithFormat相同的話;你應該能夠調用該方法並傳遞參數。 – GendoIkari 2010-11-05 20:20:42