2016-03-19 9 views
1

Objective-Cの新機能であるNSStringを返すメソッドが空の文字列を返すか、nilを返すかどうかはよく分かりません。 Objective-Cでは、多くの言語がnilsを適切に扱うように構築されているようです。nilと長さゼロの文字列を返します

たとえば、私はGUIDを返すカテゴリメソッドを持っています(管理対象オブジェクトにguidフィールドがある場合)NSManagedObjectです。

-(NSString*)guidValue { 
    if ([self respondsToSelector:@selector(guid)]) { 
     return [self guid]; 
    } 
    return nil; 
} 

は、だから私の最後のreturn文では、私はObjective-Cの標準とreturn nil;を行う必要がありますか、それだけで任意の主観的な意思決定とreturn @"";は、ビューの基準点から、同じように有効です。

+2

@LogicsaurusRexまた、定数キーで 'valueForKey:'を使う理由はありません。代わりに、メソッドを直接呼び出すだけで、オーバーヘッドをわずかに減らすことができます。**もっと重要なのは、**コンパイラがコードの型チェックを行い、将来のリファクタリングで不具合が発生した場合に不平を言うことです。 – bbum

答えて

2

nilは価値がないことを示すため、より良い選択です。空の文字列は有効な戻り値になる可能性があります(この特定のケースではないかもしれませんが、他のケースではそうかもしれません)。

実際には値(nil)と実際の値(空の文字列)を区別する必要があるかどうかによって異なります。

「無価値」、呼び出し元のコードが適切な判断を下すことはできませんを示すために、nilを返すことによって:

NSString *guid = [someObject guidValue]; 
if (guid) { 
    // use the guid as needed 
} else { 
    // uh-oh - no guid - do something else as needed 
} 
1

答えは本当にあなたが動作するようにアプリケーションを設計してきたかに依存し、どのようにこのメソッドがあります使用する。

一般的に、nilは空の文字列よりも理にかなっています。 。nilに基づいてデザインが良い仕事でしょう

if ([managedObject guid]) { 
    NSLog(@"success"); 
} 

:例えばのために

は、あなたがのようにGUIDを検証していると言います。

1

答えは意図によって異なります。空の文字列はnilと同じではありません。nilは文字列がまったくないことを意味します。

Objective-Cでnilの組み込み処理を行っていますが、nilをフィールドまたはプロパティの余分な状態として使用して、「不明な値」を示すことができます。

関連する問題