Objective-Cの最近のバージョンでは、NULL値の注釈をポインタに追加して、いつでもできることとできないことを指定することができます。nil
つまり、この法律上のような構文になります:null以外のメソッドの引数にnilを渡す
-(void)doSomething:(nonnull NSString *)param;
これはparam
はnil
してはいけませんコンパイラに指示します。しかし、それを渡すことは誤りではありませんnil
。私のAPIでは、nil
が渡されたときに私のメソッドが正常な動作をすることを確認するためにテストしています。しかし、私が気づいているのは、に合格すると、nonnull
とマークされたパラメータは自動的にその型の空のインスタンスに変換されます。私はこのように上記の例を呼び出した場合たとえば、:
[self doSomething:nil];
param
私が期待するように、空のメソッド内の文字列、およびないnil
だろう。これは文書化され、意図された動作ですか?もしそうなら、まだそれをnil
として扱う方法があるので、私はそれをより効果的に扱うことができますか?
私はちょうどテストしましたが、私はあなたが記述した動作を見ません。空の文字列を与えるために 'doSomething:'メソッドで何かしています。 – Avi
奇妙なことに、私のマシン(Public Xcode 7.3、OS X 10.11.4、iOS sim iPhone 6s Plus iOS 9.3)では、次のようになります: - (void)doSomething:(NSString *)param { NSLog(@ "%@" NSStringFromClass([param class])); '__NSCFConstantString'(これは基本的に' NSString'です)と書いてあります。 –
私は一致するように私のサンプルを修正しました。 'NSLog()'ステートメントによって出力される文字列は、 'nil'を渡しているので、'(null) 'です。 – Avi