41477


初心者で質問の内容が足りないかもしれません。  
`if`文において、変数等を使って以下のコードをもう少し短く書く方法は御座いますでしょうか？  
ご教授のほど宜しくお願い致します。

内容としましては、別クラスから呼び出したメソッドのTitleが「空っぽ」＆「nil」でない場合のif文です。宜しくお願い致します。

[code]

    if (![[Data ValueWithKey:InformationTitle] isEqual:@""] &&
        ![[Data ValueWithKey:InformationTitle] isEqual:nil]) {}
    
[/code]


CC BY-SA 3.0
2018-02-05T02:54:20.580
41475
2018-02-06T08:30:04.797
2018-02-05T05:07:25.580
27141
27141
question
objective-c
if文のもっと短い書き方を教えて頂きたいです


こんな感じでしょうか？

[code]

    emptyString = [Data ValueWithKey:InformationTitle];
    if ((emptyString != nil) && (emptyString.length == 0))
    {
        // do something
    } //end if value is ""
    
[/code]

もっと短く書くなら

[code]

    emptyString = [Data ValueWithKey:InformationTitle];
    if (!emptyString && (emptyString.length == 0))
    {
        // do something
    } //end if value is ""
    
[/code]

という書き方も出来ると思います。

余談ですが、

  * クラス名は大文字から
  * 変数名は小文字から

書き始めるのが良いと思いますので、Dataという変数名は避けた方がいいと思います。

追記  
質問のコメントを拝見して、回答の趣旨が間違っていることに気がつきました。  
上のコードはタイトルが「空っぽ」かつ「nilでない」事を判別するコードになります。  
「空っぽ」でも「nil」でもない事を判別するためには以下のコードになります。

[code]

    emptyString = [Data ValueWithKey:InformationTitle];
    if ((emptyString != nil) && (emptyString.length > 0))
    {
        // do something
    } //end if value is not empty
    
[/code]

再追記  
if文の中に入ってくれないという事で、デバッグ用に冗長化したコードを記述してみます。  
以下をステップ実行して、BOOL型の2つの変数にそれぞれYES(true)が代入されるかを確認してみてください。

[code]

    NSString *title = [Data ValueWithKey:InformationTitle];
    BOOL isNotNil = title ? YES : NO;
    BOOL isNotEmpty = (title.length > 0) ? YES : NO;
    if (isNotNil && isNotEmpty)
    {
         // do something
    } // end if title is there
    
[/code]


CC BY-SA 3.0
2018-02-05T03:20:53.543
41477
2018-02-05T08:15:17.540
2018-02-05T08:15:17.540
14745
14745
41475
answer


すでに解決してるのでこれは無視してもらってもいいです。

[code]

    NSString *title = [Data ValueWithKey:InformationTitle];
    if( title.length != 0 ) {
        //
    }
    
[/code]

これでいいです。

解説:  
Objective-Cでは nilへのメッセージパッシングは0を返します。（例外を除きます）  
ですので、もしtitleがnilであれば title.length は0を返すので条件は偽となります。  
titleがnilでなければ通常の文字列の長さが返ってきますので空文字列以外は真となります。  
また、lengthの戻り値の型はNSUIntegerですのでマイナスになることは考慮しなくてよいです。

nilへのメッセージパッシングの戻り値の例外:  
ざっくりと言うと「レジスタに入りきらない大きさの構造体に類するものを返すメソッドの場合は戻り値が不定となる。」です。  
それ以外は必ず0が返ります。

気になること：

[code]

    [Data ValueWithKey:InformationTitle]
    
[/code]

これが本当にNSStringかチェックしてないけど大丈夫？


CC BY-SA 3.0
2018-02-06T08:30:04.797
41509
2018-02-06T08:30:04.797
2741
41475
answer