Objective-C 具有多個參數的方法
我們繼續就《Objective-C 分離接口和實現文件》一文中的 Fraction 類說事。如果有一個方法能夠只用一條消息即可設置 numerator 同時又可設置 denominator,那該有多好啊!沒問題,通過列出每個連續的方法并用冒號將其連起來,就可以定義一個接受多個參數的方法。用冒號連接的參數將成為這個方法名的一部分。例如,方法名 addEntryWithName: andEmail: 表示接收兩個參數的方法,這兩個參數可能是姓名和電子郵件地址。方法 addEntryWithName: andEmail: andPhone: 是接收以下 3 個參數的方法,一個姓名,一個電子郵件地址和一個電話號碼。
同時設置 numerator 和 denominator 的方法可以命名為 setNumerator: andDenominator: 你可以采取以下形式:
[myFraction setNumerator: 1 andDenominator: 3];
這種方法還不錯。實際上,這是命名方法的首選方式。但是必須為方法指定更易閱讀的名稱。例如:一種更通用的做法,setTo: over: 它可讀性會比前面來得更強。
[myFraction setTo: 1 over: 3];
接下來,讓我們把這個新方法應用到 Fraction.h 中去:
01 #import <Foundation/Foundation.h>
02
03 // Define the Fraction class
04
05 @interface Fraction: NSObject
06 {
07 int numerator;
08 int denominator;
09 }
10
11 @property int numerator, denominator;
12
13 -(void) print;
14 -(void) setTo: (int) n over: (int) d;
15 -(double) convertToNum;
16
17 @end
02
03 // Define the Fraction class
04
05 @interface Fraction: NSObject
06 {
07 int numerator;
08 int denominator;
09 }
10
11 @property int numerator, denominator;
12
13 -(void) print;
14 -(void) setTo: (int) n over: (int) d;
15 -(double) convertToNum;
16
17 @end
然后,在實現文件中添加新方法定義:
01 #import "Fraction.h"
02
03 @implementation Fraction
04
05 @synthesize numerator, denominator;
06
07 -(void) print
08 {
09 NSLog (@"%i/%i", numerator, denominator);
10 }
11
12 -(double) convertToNum
13 {
14 if (denominator != 0)
15 return (double) numerator / denominator;
16 else
17 return 1.0;
18 }
19
20 -(void) setTo: (int) n over: (int) d
21 {
22 numerator = n;
23 denominator = d;
24 }
25
26 @end
02
03 @implementation Fraction
04
05 @synthesize numerator, denominator;
06
07 -(void) print
08 {
09 NSLog (@"%i/%i", numerator, denominator);
10 }
11
12 -(double) convertToNum
13 {
14 if (denominator != 0)
15 return (double) numerator / denominator;
16 else
17 return 1.0;
18 }
19
20 -(void) setTo: (int) n over: (int) d
21 {
22 numerator = n;
23 denominator = d;
24 }
25
26 @end
最后,在 main.m 中應用它:
01 #import "Fraction.h"
02
03 int main (int argc, const char * argv[])
04 {
05 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
06 Fraction *aFraction = [[Fraction alloc] init];
07
08 [aFraction setTo: 100 over: 200];
09 [aFraction print];
10
11 [aFraction setTo: 1 over: 3];
12 [aFraction print];
13 [aFraction release];
14
15 [pool drain];
16 return 0;
17 }
02
03 int main (int argc, const char * argv[])
04 {
05 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
06 Fraction *aFraction = [[Fraction alloc] init];
07
08 [aFraction setTo: 100 over: 200];
09 [aFraction print];
10
11 [aFraction setTo: 1 over: 3];
12 [aFraction print];
13 [aFraction release];
14
15 [pool drain];
16 return 0;
17 }
范例 7-2 完成,最終輸出結果如下:
100/200
1/3
浙公網安備 33010602011771號