在下面的代碼中,是否需要將發件人投遞給UISlider?無論如何,我無法真正看到發件人是UISlider對象的原因?將發件人強制轉換爲發件人對象類型?
-(IBAction)sliderChangeGoat:(id)sender {
UISlider *slider = sender; // OR UISlider *slider = (UISlider*)sender;
NSString *newText = [[NSString alloc] initWithFormat:@"%d", (int)[slider value]];
[sliderLabel_003 setText:newText];
if((int)[slider value] > 0) [goatLabel setText:@"Goats:"];
} else [goatLabel setText:@"None:"];
[newText release];
}
EDIT_001:
那是我在想什麼(@chuck),你是什麼意思?我不確定這是不是更改名稱發件人的錯誤形式?
-(IBAction)sliderChangeGoat:(UISlider*)slider {
}
千恩萬謝
加里
諷刺的是,當消息傳遞'id'時,你不會*獲得*編譯器警告,只有運行時錯誤。如果你輸入的是靜態的,那麼編譯器會提醒你,因爲它能更好地理解你的意圖。 – 2010-01-21 22:10:25
這是奎因的一個好點。感謝澄清。 – 2010-01-21 22:12:41
如果某個方法存在多個衝突的定義(例如'setSomething:(NSNumber *)num'和'setSomething:(NSInteger)num'),那麼當您使用'id'時,您可能會收到警告,但不會顯式靜態類型。但是一般來說,編譯器會更多的使用靜態類型變量來抱怨 - 這就是完成這一點的關鍵。 – Chuck 2010-01-21 22:14:08