setter 和 getter 也是一種方法,主要的功能就是來存取實體變數。


習慣上,Obj-C 會以 變數名稱做為 getter 的方法名稱 (或【get變數名稱】),如變數名稱叫 speed,那 getter 就會叫做 getSpeed。至於 setter 通常會叫【set變數名稱:_變數名稱】, 如  setSpeed:_speed ,其中 _speed 為參數。為避免參數與實體變數混淆,所以用不同的名稱的參數。

以下是典型的 setter 與 getter 的寫法:

@interface Car : NSObject{
 

    int speed;
}
-(int)speed;
-(void)setSpeed:(int)_speed;
@end

@implementation Car

-(int)speed{
    return speed;
}

-(void)setSpeed:(int)_speed{
    speed=_speed;
}
@end

然後我們就可以在程式中設定速度與讀取速度了:


    Car *myCar=[[Car alloc] init];
    [myCar speed:100];
    NSLog(@"Speed=%i",[myCar getSpeed]);

就會輸出【Speed=100】。

雖然很多時候,setter 與 getter 是如本案例一般的輸入與輸出 ( 在 Obj-C 有專用的語法 @property 來處理這個情形,將另節討論),可是也有很多情形,是要在 getter 與 setter 上多處理一些事情的。例如,車速可能就有最高速的限制,車速也不可能出現負值,如果車子的最高速為300,則 setter 的方法就要改寫成這樣:

-(void)setSpeed:(int)_speed{
    if( _speed < 0     ) _speed=0;
    if( _speed > 300 ) _speed=300;
    speed = _speed;
}

如此就完成了有限速的 setter。
創作者介紹

X Code Objective-C Swift 學習記錄 for iOS & macOS (OS X)

shenfive 發表在 痞客邦 PIXNET 留言(0) 人氣()