0

これは別の質問で出てきました ( meronixが親切に回答しました) が、ここで何が起こっているのか、これは LLVM/Clang の問題なのか、それとも 2 つのステートメントが何らかの形で異なるのかについて、もう少し知りたいと思っています。

ここに画像の説明を入力

追加することでこれを修正できることを知っているので(以下を参照)、何よりも興味があります...

ここに画像の説明を入力

4

1 に答える 1

6

2 つのステートメント異なります。プロパティは、左辺値の型がプロパティを宣言する場合にのみ使用できます。これは、プロパティのゲッターとセッターが明白でない可能性があるためです (多くの場合、ゲッターが明示的に に設定されているブール型プロパティの場合isSomethingです)。コンパイラは、強い型情報がなければそれを推測できません。

ただし、構文にはその[lvalue message]ようなあいまいさがないため、コンパイラはそれを許可します。左辺値の型は であるためid、コンパイラの警告なしで既知のメッセージを送信できます。コンパイラは、2 つのシグネチャが同じセレクターに対応する場合にのみ警告します (たとえば、1 つのクラスが を持ち- (UIWindow *)window、別のクラスが を持ってい- (int)windowます)。

UIApplicationDelegateプロトコルはプロパティを定義するためwindow、オブジェクトを として明示的に入力するid <UIApplicationDelegate>と、コンパイラはプロパティを認識して使用できます。

于 2012-09-25T14:05:16.590 に答える