- Objective-C和Sprite Kit游戲開發從入門到精通
- 曹化宇
- 1279字
- 2021-01-07 18:57:38
2.10 自定義函數
前面,已經使用了NSLog()函數來顯示信息,接下來,我們看一看如何創建自己的函數,而這些函數可以幫助我們更好地組織代碼和實現軟件功能。
函數是一種基本的代碼封裝與組織形式,我們知道,在一艘軍艦上,只有各個崗位的人員都能夠各盡其責,軍艦才能夠正常運行,才會有戰斗力。而函數對于整個程序來講,也是這樣,必須能夠正確、高效地完成本職工作才稱得上是一個合格的函數。
從圖2-16中,我們可以看到,程序會從main()函數開始,然后會有大量的函數來支援它,這就是函數的基本工作方式。目前為止,我們使用的示例項目都是這種工作方式。此外,在Objective-C中,我們還可以使用另一種代碼組織形式,這就是使用面向對象編程(OOP),在第4章,我們會討論相關內容。

圖2-16 函數的調用
在Objective-C中聲明函數的格式如下。
<返回值類型> <函數名>(<參數列表>);
如果我們實現這個函數,就不使用分號,而是將函數的代碼放在一對花括號{}之間。如下面的代碼。
#import <Foundation/Foundation.h> void sayHello() { NSLog(@"Hello! "); } int main(int argc, const char *argv[]) { @autoreleasepool { sayHello(); } return 0; }
代碼中,我們定義了一個無返回值、無參數的sayHello()函數,然后,在main()函數中調用它;執行代碼會顯示“Hello! ”。
接下來,我們討論一下定義函數時需要注意的幾個問題。
■2.10.1 返回值類型
返回值類型,也就是函數運行結果的數據類型;在函數中,使用return語句返回這個數據;如果函數不需要返回數據,就像上面的代碼一樣,可以將返回值類型定義為void。
返回值的類型可以是前面介紹的基本數據類型,也可以是對象,比如,函數需要返回一個字符串對象(NSString類型),還應該使用*運算符。如下面的代碼。
NSString* getName() { return @"你猜!^_^"; }
關于對象的相關內容,我們會在第4章介紹,大家不用著急。
■2.10.2 函數名
函數的名稱,本書中的自定義函數名會使用首字母小寫,其他單詞首字母大寫的形式。
函數名應該反映出函數的功能,在Objective-C中,函數命名會有一些約定,遵循這些約定,可以更有效地使用這些函數,在后續的應用中,我們就可以看到這一點。
■2.10.3 參數
參數列表,在定義函數時,可以沒有參數,像上面代碼中定義的sayHello()函數,也可以有一個或多個參數,每一個參數都應包含兩個基本部分,即參數類型和參數變量,如下面的代碼。
#import <Foundation/Foundation.h> int addInt(int x, int y) { return x + y; } int main(int argc, const char *argv[]) { @autoreleasepool { int sum = addInt(6, 4); NSLog(@"sum = %i", sum); } return 0; }
在我們定義的addInt()函數中,定義了兩個參數,分別是x和y,它們都是int類型的,而addInt()函數的功能就是返回這兩個參數的和,其返回值類型同樣是int類型。
■2.10.4 參數指針
下面,我們創建一個函數,嘗試交換兩個int變量的值,這個看上去似乎并不難,馬上動手,如下面的代碼。
void swapInt(int x, int y) { int temp = x; x = y; y = temp; }
然后,使用如下代碼來調用這個函數。
int main(int argc, const char *argv[]) { @autoreleasepool { int num1 = 10; int num2 = 99; NSLog(@"num1 = %i , num2 = %i", num1, num2); swapInt(num1, num2); NSLog(@"num1 = %i , num2 = %i", num1, num2); } return 0; }
問題來了!上面的代碼并不會交換num1和num2的值。
這是為什么呢?
原因是,當我們將num1和num2變量傳遞給swapInt()函數時,參數復制了它們的數據。在函數內部,只是在交換數據副本的值,而不是真正地交換num1和num2變量的值。
那么,如何才能真正地修改參數的值呢?答案就是,在參數中使用指針,下面就是修改后的swapInt()函數。
void swapInt(int *x, int *y) { int temp = *x; *x = *y; *y = temp; }
在調用swapInt()函數時,我們同樣需要做一些修改,如下面的代碼。
swapInt(&num1, &num2);
這樣,我們就可以通過swapInt()函數順利地交換兩個int變量的值了。
- 完全掌握Office 2010高效辦公超級手冊
- 金蝶ERP-K/3培訓教程:財務/供應鏈/生產制造(第2版)
- 和秋葉一起學:秒懂WPS演示文稿
- Word/Excel 2010辦公應用實戰從入門到精通
- Excel 2013從入門到精通
- 新編Office 2016應用大全(實戰精華版)
- Excel 2013從新手到高手(超值版)
- Word Excel PPT2016 高效辦公一本通
- Word/Excel/PPT 2016商務辦公從新手到高手
- Excel函數與公式應用技巧
- PowerPoint 2010精美幻燈片制作
- 大話PPT:幻燈片制作真經
- 辦公自動化教程(第2版)
- Project 2007企業項目管理實踐
- WPS Office 從入門到精通