わかりました、なぜ私がこれについてそんなに混乱しているのか、皆さんはすぐに指摘できると思いますが、なぜ以下がコンパイラエラーまたは警告にならないのかについて質問があります:
NSString * intValue = [ NSString stringWithFormat:@"int = %i", [ [ self.selectedObject valueForKey:name ] integerValue ] ];
selectedObject
は でありNSObject
、name
たまたま@property
タイプの の名前ですint
。
私を困惑させているのは、コンパイラがの呼び出しでメッセージをチェーンするために、 の戻り結果が (型キャストせずに) 型で[ self.selectedObject valueForKey:name ]
あると完全に仮定する理由です。NSNumber *
integerValue
明らかに、KVC は非オブジェクトの「数値」型を にラップしますが、この特定のケースでが返されるNSNumber
ことをコンパイラが知る方法はありません。-valueForKey:
NSNumber *
id
これにより、 「 ' ' に応答しない可能性があります」という行に沿ってコンパイラの警告が表示されないのはなぜ-integerValue
ですか?