0

重複の可能性:
ドット構文と角括弧構文の違いは何ですか?

次の 2 つの式を使用してみました。

  1. [[[self display] text] stringByAppendingFormat:digit];

  2. self.display.text = [self.display.text stringByAppendingFormat:digit]

displayはです。UILabel_digitNSString

digitラベルの として設定するつもりですtextが、プログラムを実行しようとすると、#2 だけが正しい結果を示しました。

では、これら 2 つの表現の違いは正確には何でしょうか。ゲッターとセッターに角かっこを使用するのは間違っていますか?

この同様の質問を確認しまし た。ドット構文と角括弧構文の違いは何ですか? 、しかし、まだそれを理解することはできません。

4

2 に答える 2

4

2 つの構文はまったく同じです。ドット構文は、コンパイラによってブラケット構文に変換されます。問題は、最初のスニペットで値を設定していないことです。次のように変更した場合:

[[self display] setText:[[[self display] text] stringByAppendingFormat:digit]];

ドットの場合と同じ結果が表示されます。

ただし、一時変数を使用して、物事を少し読みやすくすることをお勧めします。

NSString * oldText = [[self display] text];
[[self display] setText:[oldText stringByAppendingFormat:@"%@", digit]];

への最初の引数としてフォーマット文字列を指定する必要があることにも注意してくださいstringByAppendingFormat:。文字列に誤ってdigit書式指定子が含まれていると、クラッシュが発生します。ここでのより良い選択はstringByAppendingString:--[oldText stringByAppendingString:digit]です。

于 2011-12-06T09:48:19.920 に答える
2

基本的にそれらの間に違いはありません。

あなたが神秘的にいくつかのコードをドロップしたかどうかはわかりませんが、使用すると-

  [[[self display] text] stringByAppendingFormat:digit];

式の結果を変数に割り当てていません。あなたがすべき:

   self.display.text = [[[self display] text] stringByAppendingFormat:digit];

それが役立つことを願っています

シャニ

于 2011-12-06T09:53:54.897 に答える