2013-04-05 27 views
-1

鑑於...爲什麼不可能爲每行聲明多個方法原型?

@interface Hog : NSObject { NSUInteger one, two, three;  } 
@property (strong, nonatomic) NSString *four, *five, *six; 
-(void) seven; 
@end 
@implementation Hog 
static CGFloat f, ff, fff; 
- (NSString*) six { return _four = _five = _six = @"sexy"; } 
- (void) seven {   one = two = three =  33; 
           f = ff = fff =  6.66; 
         SEL sevenSelect = @selector(seven); 
    NSLog(@" %ld, %0.2f, %@, %@", 
    three, fff, self.six, NSStringFromSelector(sevenSelect)); } 
@end 
int main(int argc,char *argv[]){ Hog *u = Hog.new; [u seven];} 

Output: 33, 6.66, sexy, seven 

然後..爲什麼沒有可能的話,要在頭,等申報

-(void)seven, eight, nine;

?有什麼不同? objc-c不只是對待IMP,或任何它是,就像其他變量,塊等一樣?爲什麼即使打擾原型,反正呢?特別是,如果它是在類擴展中,那麼爲什麼還要麻煩,而且你只是直接在下面寫方法。這似乎只是一個錯誤的機會,不必要的重複,不是嗎?我知道我錯了,但我要求接受教育,所以繼續。

+2

因爲它不是。這是一種語言(C)。它工作的方式。 - 當然,在現代Objective-C中,無論如何你都不需要聲明方法(除非你在.h文件中公開它們)。 – matt 2013-04-05 16:57:42

+3

這對於像' - (id)initWithObjects:(id)firstObj,...'這樣的原型來說會很模糊。 – 2013-04-05 17:02:43

回答

2

方法聲明在語法上與變量聲明不是一回事。它們有不同的語法,只能出現在特定的上下文中。

是否可以修改Objective-C的語法以允許用逗號分隔多個變量聲明?是的,它會 - 但它需要比你想象的更大的改變,因爲當聲明包含參數時,聲明可能會變得更加複雜。對於允許人們編寫較少可讀的聲明而言,進行一次主要的語法變更沒有意義。這實際上沒有什麼好處。

相關問題