合成存取方法 @synthesize
範例程式
- #import "Fraction.h"
- @implementation Fraction
- {
- int numerator;
- int denominator;
- }
- -(void) print
- {
- NSLog(@"%i/%i", numerator, denominator);
- }
- -(void) setNumerator:(int)n // setter方法
- {
- numerator = n;
- }
- -(void) setDenominator:(int)d
- {
- denominator = d;
- }
- -(int) numerator // getter 方法
- {
- return numerator;
- }
- -(int) denominator
- {
- return denominator;
- }
- -(double) convertToNum
- {
- if (denominator != 0)
- return (double) numerator / denominator;
- else
- return NAN;
- }
- @end
合成存取方法
在 Objc 2.0,您可以讓 setter 和 getter 這兩個方法自動產生。
( 一般稱之為存取方法 ( accessor method ) )
現在才提及這個,是因為自己能寫出這些方法對於程式設計師是非常重要的。
既然 Objc 2.0 提供這樣方便的功能,那我們就要好好善用這項優點。
首先先介紹 @property 指令識別屬性(properies)。這些屬性通常是實體變數。
例如,在Fraction 類別裡,實體變數 numerator 與 denominator 就屬於這類。
以下介面區段新增了@property指令:
- @interface Fraction : NSObject
- @property int numerator, denominator;
- -(void) print;
- -(double) converToNum;
- @end
請注意,我們不必載入 getter 和 setter 方法的定義:numerator、denominator、setNumerator :、setDenominator : ,而是讓 Objc 編譯器自動為我們產生 ( generate ) 或合成 ( synthesize )。只要在實作區段使用 @synthesize 指令就可以了,如下:
- #import "Fraction.h"
- @implementation Fraction
- @synthesize number, denominator;
- -(void) print
- {
- NSLog (@"%i / %i ", numerator, denominator);
- }
- // 使用@synthesize 後,可省略 setter 和 getter 方法
- -(double) converToNum
- {
- if (denominator != 0)
- return ( double ) numerator / denominator;
- else
- return NAN;
- }
- @end
留言
張貼留言