[英]Frustrated with Objective-c code
好吧,我已經開始使用Head First iPhone Development(O'reilly)進行iPod / iPhone編程,並且正在從書中鍵入代碼。 有兩個問題,一個與編程有關,另一個與編程無關。
我不了解Objective-C方法的格式。 根據這本書的源代碼,我現在遇到一些錯誤。 這導致我下一個問題。
一些代碼是錯誤的。 我認為是這樣,因為如果不修改它就無法運行代碼。 由於這是第一版,因此本書中有一些錯字,但我的“修正”代碼可能與此有關嗎?
那么... 我在哪里可以了解有關Objective-C方法的更多信息,以及它們如何在結構上起作用以及返回類型和參數在哪里?
對於那些擁有本書的人,我在開始時就處於InstaTweet應用程序的中間位置。
謝謝。
也許將“類似於c”的語言與obj-c進行比較會很有用-讓我們開始使用Java。 想象一下帶有setBackgroundColor方法的Rectangle類。 我們假設我們有一個名為rect的Rectangle實例。
在Java中,方法簽名可能是
public void setBackgroundColor(int r, int g, int b) { ... }
在Objective-C中,參數是方法簽名的一部分,因此它可能是
- (void)setBackgroundColorWithRed:(int)r green:(int)g blue:(int)b;
“-”表示它是Rectangle類的實例方法。 (void)是方法的返回類型。 然后來論證。 每個冒號定義一個參數,該參數被鍵入(在此示例中,每個arg為(int))。
讓我們比較調用這些方法。 Java:
rect.setBackgroundColor(255, 255, 0);
對象:
[rect setBackgroundColorWithRed:255 green:255 blue:0];
很多人迷戀obj-c的語法-您並不孤單。 希望這種比較可以使事情變得更清楚。 它還體現了Objective-C的語言優勢:在通話時,您的論點很清楚。 如果我正在閱讀代碼,並且看到Java方法被調用,則參數是紅色,藍色和綠色並不是很明顯。 令人費解的是,在obj-c中,我們正在設置各個顏色值。 當然,大多數開發人員都可以猜測setColor方法的三個參數是什么,但是更復雜的方法會造成混淆。 這是用Java和Objective-c定義的更復雜的方法:
static Dog createDog( String name
, int age
, boolean isNeutered
, String ownerName
);
+ (Dog *)createDogNamed:(NSString *)name
age: (int) age
neutered:(BOOL) isNeutered
owner: (NSString *) owner;
通話時:
Dog.createDog("Fluffy", 2, true, "Moshe");
[Dog createDogNamed:@"Fluffy" age:2 neutered:YES owner:@"Moshe"];
Objective-c較為冗長,但可讀性更高。 在Java示例中,還不清楚“ 2”和“ true”自變量的含義。 Objective-c的讀法幾乎像英語。
其他人已經發布了指向更深入指南的鏈接,但是我希望這可以使您擺脫語法絆腳石,足以使這些鏈接有用。 我很高興回答您的更多具體問題。 以我的經驗,obj-c新手在語法方面非常艱難,然后單擊 s並感覺很棒。 掛在那里!
查看Apple 關於Objective C的介紹 。
基本方法格式為
-(ReturnType *)methodName:(VariableType *)variableName{
}
例如:
-(NSString *)giveMeANewStringFromAnOldString:(NSString *)oldString{
}
您還應該檢查書籍的勘誤表。
Objective-C方法的定義非常簡單。 實際上,它與常規C函數調用定義非常相似。 最大的補充是可以為參數命名。 這是一個例子:
-(int)addX:(int)x toY:(int)y
{
return x + y;
}
您可以通過向適當的對象發送消息來使用:
int z = [object addX:x toY:y];
在這種情況下,我為參數和參數指定了相同的名稱,以使事情變得清晰起來。 您可以輕松地做到:
int z = [object addX:4 toY:7];
之后, z
將為11。
我做了你做的同樣的事情。 我也拿起了《 Head First iPhone Development》一書(包含3.1 SDK)。
我瀏覽了其中的所有教程,發現只有一個錯誤導致我的應用程序無法正常工作(我在書中記下了它,但現在找不到了...)。
因此,在那之后,我意識到我在語法上遇到了完全相同的問題。
我選擇了Stephen G. Kochan撰寫的“在Objective-C 2.0中編程”。 (簡直太棒了。)這本書簡明扼要。 我什至沒有讀完本書的25%,我的所有問題都得到了回答。
讀目標C代碼讓我花了幾個月的時間,因為我已經習慣了不同的語法,以至於我的大腦花了一些時間來適應目標C的期望。
我發現,一旦您動腦筋,Objective-C代碼就會變得真正可讀。 上面的Carl Norum的例子很好地展示了可讀性。
[object addX:4 toY:7];
沒有比這更具可讀性的了!
另外,某些術語也有所不同。 “向對象發送消息”與“調用方法”也讓我呆了幾個星期。
我希望這本書的建議對您有幫助,對我有很多幫助。
閱讀Mac®OS X(第3版)的Cocoa(R)編程 ,這是Mac和Cocoa的聖經。
我沒有任何問題,但請記住,API一直在向前發展,因此可能會有一些微小的更新/更改。 但是我還沒有發現任何阻礙我完成所有代碼示例和練習的東西。
這是本書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.