4

現時点では、API は値を持たないパラメーターに対して返さNULLれます。int

たとえば、ユーザー API では、パラメーターの 1 つが次のようになります。

{
    ...
    "user_id":NULL
    ...
}

0これは有効な応答である可能性があるため、これはあり得ないことを理解していますが、 s をポインターにすることはできないNULLため、ポインターを持つとあらゆる種類の問題が発生します。intNULL

私の考えでは、これらの値は完全に除外する必要があると考えていました-その後、より適切と思われる値を返しnilます(目的の c など[dictionary objectForKey:@"user_id"] == nil)。null ポインターをチェックしていません (間違っているようです。int との間に違いがあります)。およびポインター)。

それ以外の場合、回避策NSNumberは、ポインターを必要とするオブジェクトにすることであり、したがってNULL. 次に、次のようなことができます。

NSNumber *userID = [dictionary objectForKey:@"user_id"];
if(userID != [NSNull null]){
  // its not null
}

しかし、私にはこれは根本的に間違っていると感じており、NSNumberドキュメントには次のように書かれています。

数値オブジェクトは、作成時の型を必ずしも保持しないことに注意してください。

これもまた汚く感じます。

(繰り返しますNSDecimalNumberが、文字列で s を初期化しています...なぜこれが私を悩ませるのかわかりません...)。

4

3 に答える 3

2

「API」が を返すことが期待される場合、int決して NULL を返すべきではありません。すでに言ったように、 を使用NSNumberできます。その場合、NULL を返すことができます。について話すときintNSNumberデータが失われることはありません。無理数のような場合にのみ、異なるタイプが重要になります。

つまり、場合によっては NULL/nil を返したい場合は、オブジェクト型 NOT を使用する必要がありますint。を使用して気分が良くなった場合int、唯一の方法は、 のような特別な「無効な」値を使用する-1-INT_MAX、値が無効であることをユーザーに知らせることです。または、それがオプションである場合は例外をスローするか、別のメソッドを追加して、有効な応答が得られるかどうかを確認できます。

于 2012-11-20T16:12:55.790 に答える
1

API にユーザーがなく、user_id が返される唯一の値である場合は、本文に何もない 404 ステータス コードを返さないでください。次に、ステータスコードを確認します。当然のことですが、404 == リソースは存在しません。REST を活用してステータス コードを使用し、200 ステータス コードで偽のリソースを返さないでください。

ただし、user_id が返されるより大きなリソースの一部にすぎない場合 (別のリソースとの関係など)、返されるリソースに user_id が設定されていなければ、NULL は完全に正当化されます。

于 2012-11-20T16:06:36.650 に答える
1

API呼び出しの成功結果でステータスキーを作ってみませんか?これは、API 応答を作成するときに私がいつも行っていることです。機能したかどうかを示すブール値、または成功しなかった場合に発生したエラーを示す整数である可能性があります。そうすれば、API が失敗した場合に、この例の user_id に触れる必要さえありません。

NSNumber *status= [dictionary objectForKey:@"status"];
if(status > 0){
    //succeed
}
else {
   //use status to indicate which error occured
}
于 2012-11-20T16:20:56.007 に答える