5

私はそれを知っています。セッターのショートカットです。時々、私はその種のコードを使用します:

cell.textLabel.text = [NSString stringWithFormat:@"this is row %i", indexPath.row];

これは期待どおりに機能しますが、私は疑問に思っていました。

cell.textLabel.text = [NSString stringWithFormat:@"this is row %i", [indexPath row]];

または、言い換えると、ドット構文を=演算子でのみ使用する必要があります。

aTextField.text = @"whatever";

リンク/ドキュメントは大歓迎です、ありがとう:)

PS。タグが表示されていない場合は、ここでiOSについて話します。

4

5 に答える 5

6

ドット(。)は、セッターのショートカットであるだけでなく、ゲッターのショートカットでもあります。ゲッターにもドットを使用できます。問題はありません。これも悪い習慣です。Obj-C 2.0プログラミングガイドから、「ドット構文を使用して、構造要素にアクセスするのと同じパターンを使用してアクセサメソッドを呼び出すことができます。ドット構文は純粋に「シンタックスシュガー」です」。セッターだけでなく、アクセサーメソッドについても言っていることに注意してください。

于 2011-01-20T10:57:35.797 に答える
4

それは好みの問題です。

さまざまな理由から、ドット構文を使用しないことを好みます。

  • ドット構文を使用する場合、値を設定するコード内の場所だけを見つけるのははるかに困難です。setValueの検索:.valueを検索するよりもはるかに簡単です

  • 長年のCプログラマーとして、私の頭脳はドット構文を構造体メンバーへのアクセスに関連付けるように配線されています。別のスコープのドット構文に慣れるのはかなり難しいと思います。

  • setXY:構文closeは、自然言語に非常に近いものです。他の人のコードを非常に簡単に読むことができます。

于 2011-01-20T11:20:46.660 に答える
3

「。」にアクセスするためのショートカットです@property(ちなみに、読み取り専用の場合もあります)。構文の観点から、これがゲッターであるかセッターであるかは、オペランドの位置によって異なります。

self.enabled = NO; // setter
BOOL isEnabled = self.enabled; // getter
self.selected = self.enabled = NO; // this is OK too
于 2011-01-20T11:00:14.810 に答える
1

コーディングスタイルなので、どちらも優れていません。

ただし、2つのことに注意します。

長い間、Objective Cコードとして、[indexPath行]を好みます。これは、コードの残りの部分と一貫性があり、セットには[aTextField setText:@"whatever"]を使用するからです。

ただし、を使用する必要がある場合。キーパスの表記法は、同じコード内のメソッド表記法を介して同じ変数にアクセスするのは奇妙に思えます。

Appleのドキュメントによると

Objective-Cは、角かっこ表記([] s)の代わりにアクセサメソッドを呼び出すために使用できるコンパクトで便利な構文を提供するドット(。)演算子を提供します。

myInstance.value = 10;
printf("myInstance value: %d", myInstance.value);

ドット構文は純粋に「シンタックスシュガー」です。コンパイラによってアクセサメソッドの呼び出しに変換されます(したがって、実際にはインスタンス変数に直接アクセスしていません)。上記のコード例は、次のコードとまったく同じです。

[myInstance setValue:10]; printf("myInstance value: %d", [myInstance value]);
于 2011-01-20T11:00:37.620 に答える
-2

ドット構文の使用は、コーディングスタイルや好みの問題ではありません。

ドット構文は、プロパティにアクセスするためのものです。メッセージ送信構文は、メソッドをディスパッチするためのものです。それらは概念的には2つの異なるものです。残念ながら、Objective-C 1.0とのレガシーおよび下位互換性により、互換性があり、混乱が生じています。

ドット構文を使用するかどうかの天気は非常に単純です。

  • パブリックヘッダーが何かをプロパティとして宣言している場合は、インターフェイスの作成者が明示的に意図しているように、 dot-syntaxを使用してプロパティとしてアクセスします。
  • パブリックヘッダーがメソッドとして何かを宣言している場合は、インターフェイスの作成者が明示的に意図しているように、メッセージ送信構文を使用してそれにアクセスします。
  • 例外はありません。

難しい質問は、何かをプロパティとして宣言して、doit-syntaxを使用する必要があることをクライアントに伝える必要があるのか​​、それともメソッドを宣言する必要があるのか​​ということです。簡単な答えは次のとおりです。

  • 状態 のプロパティを使用します(何かです)
  • 行動 のためのメソッドを使用する(何かを行う/計算する)

もう1つの経験則は、プロパティは自己完結型である必要があり、プロパティの値を変更する他の方法はなく、プロパティ自体を設定する必要があるということです。これは難しいルールではありません。常識を働かせてください。多くの賢明な例外が存在します。たとえば、メソッドhiddenで変更できるプロパティ。setHidden:animated:

于 2011-01-20T12:08:08.373 に答える