1

私は Objective-C に非常に慣れていないため、これが多くの人にとって非常に明白である場合は申し訳ありませんが、次のコードが実際にどのように機能するかを理解しようとしています。

- (IBAction)chooseColour:(UIButton *)sender {
 sender.selected = !sender.isSelected;
}

アクションを送信するボタンの選択状態と非選択状態を明らかに切り替えますが、コード「sender.selected = !sender.isSelected」は実際に何を言っているのでしょうか? 「送信者が選択したプロパティをゲッターの反対(つまり、そうではない)に設定する」だけですか?そのため、ゲッターが現在選択されている値を true として「取得」している場合、選択されたプロパティを !true、つまり false に設定します。それとも、これは私がまだよく知らない便利なコードですか? 「!sender.isSelected」は単に選択されていないことを意味するようにも見えるため

if (!sender.isSelected){
statement
}

つまり、送信者が選択されていない場合はステートメントを実行します。これは間違いなく明らかですが、現時点では少し混乱しています。

ありがとう!

4

4 に答える 4

2

あなたは完全に正しいです。値を取得するためにゲッターを呼び出し、値の NOT ( !) を使用してセッターを呼び出しています。これは Objective-C ではなく、単純な C 構文です。

于 2013-08-14T23:20:44.383 に答える
1

「送信者が選択したプロパティをゲッターの反対(つまり、そうではない)に設定する」だけですか?

丁度。それか。

それとも、これは私がまだよく知らない便利なコードですか?

いいえ、構文糖衣の唯一の部分はゲッター/セッターのドット表記ですが、あなたはすでにそれを認識しています.

于 2013-08-14T23:23:26.550 に答える
0

コードの一部:

sender.selected = !sender.isSelected;

基本的に選択を反転します。Is this false?true は false と評価され、false は true と評価されるように質問します。というわけでトグルです。

于 2013-08-14T23:25:09.303 に答える
0

ドキュメントから:

@property(nonatomic,getter=isSelected) BOOL selected;                                // default is NO may be used by some subclasses or by application

// ![sender isSelected] を使用した場合の説明 プロパティの値は変更されません。次に、setter sender.selected = ![sender isSelected] を使用すると、新しい値が送信者 (選択されたプロパティ) に設定されます。次に、getter sender isSelected を実行して新しい値を返します。

于 2013-08-14T23:43:50.317 に答える