これは別の質問で出てきました ( meronixが親切に回答しました) が、ここで何が起こっているのか、これは LLVM/Clang の問題なのか、それとも 2 つのステートメントが何らかの形で異なるのかについて、もう少し知りたいと思っています。
追加することでこれを修正できることを知っているので(以下を参照)、何よりも興味があります...
これは別の質問で出てきました ( meronixが親切に回答しました) が、ここで何が起こっているのか、これは LLVM/Clang の問題なのか、それとも 2 つのステートメントが何らかの形で異なるのかについて、もう少し知りたいと思っています。
追加することでこれを修正できることを知っているので(以下を参照)、何よりも興味があります...
2 つのステートメントは異なります。プロパティは、左辺値の型がプロパティを宣言する場合にのみ使用できます。これは、プロパティのゲッターとセッターが明白でない可能性があるためです (多くの場合、ゲッターが明示的に に設定されているブール型プロパティの場合isSomething
です)。コンパイラは、強い型情報がなければそれを推測できません。
ただし、構文にはその[lvalue message]
ようなあいまいさがないため、コンパイラはそれを許可します。左辺値の型は であるためid
、コンパイラの警告なしで既知のメッセージを送信できます。コンパイラは、2 つのシグネチャが同じセレクターに対応する場合にのみ警告します (たとえば、1 つのクラスが を持ち- (UIWindow *)window
、別のクラスが を持ってい- (int)window
ます)。
UIApplicationDelegate
プロトコルはプロパティを定義するためwindow
、オブジェクトを として明示的に入力するid <UIApplicationDelegate>
と、コンパイラはプロパティを認識して使用できます。