「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)はメソッドの戻り型です。次に、議論が来ます。各コロンは、型指定された引数を定義します(この例では、各引数は(int)です)。
これらのメソッドの呼び出しを比較してみましょう。Java:
rect.setBackgroundColor(255, 255, 0);
Obj-c:
[rect setBackgroundColorWithRed:255 green:255 blue:0];
多くの人がobj-cの構文に出くわします-あなたは一人ではありません。うまくいけば、この比較によって物事がより明確になるでしょう。また、Objective-cの言語的な強みを示しています。呼び出し時に、あなたの議論が何であるかは明らかです。コードを読んでいて、Javaメソッドが呼び出されているのを見た場合、引数が赤、青、緑であることは明らかではありません。obj-cでは、個々の色の値を設定していることは非常に明白です。確かに、ほとんどの開発者はsetColorメソッドの3つの引数が何であるかを推測できますが、より複雑なメソッドは混乱を招きます。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をクリックして素晴らしいと感じます。頑張れ!