对Objective-c代码感到沮丧

Mos*_*she 1 iphone methods xcode ipod objective-c

好吧,我已经开始使用Head First iPhone开发(O'reilly)进行iPod/iPhone编程,而且我正在输入书中的代码.有两个问题,一个是编程相关而另一个不是.

  • 我不明白objective-c方法的格式.根据本书的源代码,我现在收到一些错误.这让我想到了下一期.

  • 一些代码是错误的.我是这么认为的,因为我无法在不修改代码的情况下运行代码.这本书在文本中有一些拼写错误,因为它是第一版和诸如此类的东西,但是我的"修复"代码可以与它有关吗?

那么...... 我在哪里可以更多地了解objective-c方法以及它们在结构方面的工作方式以及返回类型和参数的位置?

对于那些有书的人,我正处于InstaTweet应用程序的中间.

谢谢.

jib*_*ria 5

也许对"类c"语言和obj-c进行比较会很有用 - 让我们选择Java.想象一下带有setBackgroundColor方法的Rectangle类.我们假设我们有一个名为rect的Rectangle实例.

在Java中,方法签名可能是

public void setBackgroundColor(int r, int g, int b) { ... }
Run Code Online (Sandbox Code Playgroud)

在Objective-C中,参数是方法签名的一部分,因此它可能是

- (void)setBackgroundColorWithRed:(int)r green:(int)g blue:(int)b;
Run Code Online (Sandbox Code Playgroud)

" - "表示它是Rectangle类的实例方法.(void)是方法的返回类型.然后来论证.每个冒号定义一个参数,该参数是键入的(在本例中每个arg都是(int)).

让我们比较一下这些方法.Java的:

rect.setBackgroundColor(255, 255, 0);
Run Code Online (Sandbox Code Playgroud)

OBJ-C:

[rect setBackgroundColorWithRed:255 green:255 blue:0];
Run Code Online (Sandbox Code Playgroud)

很多人偶然发现了obj-c的语法 - 你并不孤单.希望这种比较能让事情更加清晰.它也体现了目标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;
Run Code Online (Sandbox Code Playgroud)

在通话时间:

Dog.createDog("Fluffy", 2, true, "Moshe");
[Dog createDogNamed:@"Fluffy" age:2 neutered:YES owner:@"Moshe"];
Run Code Online (Sandbox Code Playgroud)

Objective-c更冗长,但更具可读性.在Java示例中,"2"和"true"参数的含义并不十分清楚.Objective-c几乎就像英文一样.

其他人已经发布了更多深入指南的链接,但我希望这能让你超越语法绊脚石,足以让链接变得有用.我很乐意回答您提出的更具体的问题.根据我的经验,obj-c新手在语法方面非常艰难,然后点击 s并感觉非常棒.挂在那儿!