Objective-c 3項演算子で代入できない

このQ&Aのポイント
  • Objective-c 2.0で3項演算子を用いてプロパティに代入演算子で代入を行おうとするとExpression is not assignableエラーになります。
  • エラーになる例は、label.textに3項演算子を用いて文字列を代入しようとするとエラーが発生します。
  • 3行目をsetTextメッセージに置き換えるとエラーは出なくなり、if文に置き換えてもエラーは出ません。
回答を見る
  • ベストアンサー

Objective-c 3項演算子で代入できない

Objective-c 2.0で3項演算子を用いてプロパティに代入演算子で代入を行おうとすると Expression is not assignableエラーになります。 なぜでしょうか? 1.エラーになる例 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; BOOL flag = YES; flag == YES ? label.text = @"a" : label.text = @"b"; // ここでエラー 2.3行目をsetTextメッセージに置き換えるとエラーは出なくなります。 flag == YES ? [label setText:@"a"] : [label setText:@"b"]; // これはOK 3.if文に置き換えてもエラーは出ません。 if(flag == YES) label.text = @"a"; // これもOK else label.text = @"b"; // これもOK 1.と2.の書き方は等価だと思っていたのですが、どうやら等価ではないということは わかりました。では、どう違うのかというと、そこまでの理解には自力では至れませんでした。 1.だとnot assignableなのに3.だと問題ない理由もわかりません。 何か理解のためのヒントをいただけないでしょうか? よろしくお願いします。 環境: XCode Version 4.3.2 (4E2002) Apple LLVM Compiler 3.1

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

優先順位

jjk65536
質問者

お礼

あーなるほど。 なにか勘違いしていて、CならOKのはずなのに!と思ってたんですが Cでもだめですねこれ。 label.text = flag == YES ? @"a" : @"b"; ですね。 お騒がせしました。

関連するQ&A

  • 論理和演算子を使って、三項演算子のような簡易分岐ができるようなコードを

    論理和演算子を使って、三項演算子のような簡易分岐ができるようなコードを書けるという テクニックがあるというのを本で読んで試して見たのですが、うまくいきません。 本に書いてあるコードはこんな感じです。 bがなければ、cのプロパティであるdを、それもなければ、500をaに代入する。 bを削除するとdが代入されると思ったのですが、エラーになってしまいます。 //var b = 1; var c = new Object(); c.d = 2; var a = b || c.d || 500 ; どうやったらうまくいきますでしょうか?よろしくお願いします。

  • ACCESS 値の代入

    テキストボックスの値の代入をさせたい下記 例1 Aのテキストボックス Is not Null Bのテキストボックス null 結果 Cのテキストボックス OK 例2 Aのテキストボックス null Bのテキストボックス null 結果 Cのテキストボックス NG 例3 Aのテキストボックス Is not Null Bのテキストボックス Is not Null 結果 Cのテキストボックス NG

  • 論理演算について

    次の表(真理値表と言う)と等価な論理演算(AND,OR,NOTで表現) を求めてください。    入力A 入力B 出力C     1   1    0     1   0    0     0   1    1     0   0    0 という問題なのですが、どのように答えたら(NOT、AND、ORで表現するってゆー意味がわからないんです)よいのかよくわからないのです。 今日提出課題なので急いでいます。 どなたか教えてください。よろしくお願いします。

  • C#でビット演算はできますか?

    C#2008で、以下のソースを動かして、OK 2が表示されるのを期待していたのですが、演算子&をintとbool型の演算子に適用できません。 となります。 何か良い方法はありますか? int a = 32 | 16; int b = 8; int c = 16; if (a & b != 0){ MessageBox.Swho("OK 1"); } if (a & c != 0){ MessageBox.Swho("OK 2"); }

  • 複合代入演算子について

    ものすごく根本的なことなのですが 下の「何々」に相当する部分はLPCTSTR単独か、それと_stprintf_sの書式に見合った引数のリストを正しく表記されているとして また、合計がSIZE_を超える恐れはないことが分かっているとして enum { SIZE_=30 }; TCHAR c[SIZE_]; int len = _stprintf_s( c, SIZE_, 何々 ); if ( 何らかの条件 ) len += _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); len += _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); ・ ・ ・ といったのは問題ない方法でしょうか? int a=0, b=1; a+=b; は a = a + b; と等価になることから len += _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); は len = len + _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); と等価と考えて良いことが保証され 右辺の len + _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); の時点では3か所ともlenは必ず演算前の数値になる、よって 未定義動作ではない、と考えて良いのでしょうか?

  • String型の変数に代入されている2つの文字列を論理演算したいです。

    String型の変数に代入されている2つの文字列を論理演算したいです。 上記の通りなんですけど 例えば String a = "あいうえお"; String b = "aiueo"; このような二つの文字列を論理演算したあと 16進数の文字列としてあらたな変数(String型)に代入したいのですが どのように記述すればよろしいでしょうか? 初心者なものでわかりやすく説明していただけるとありがたいです。

    • ベストアンサー
    • Java
  • VBAのコンボボックスで選んだものによって、違う数字を代入させたい

    VBAのコンボボックスで選んだものによって、違う数字を代入させたい お知恵をお貸しください。 現在、EXCEL2007のVBAにて、ちょっとしたVBAを作成しています。 コンボボックスには14項目を設定しています。 そのコンボボックスで選んだものによって下のコードの@マーク部に違う数字を代入させたいのですが、どうしたらいいのでしょうか? (例) ----コンボボックス---- あ い う え お か き ・ ・ ・ コンボボックスは14項目あり、コンボボックス内の「う」を選ぶと、5が代入され下のコードの@部分に5が入ります こんな風にコンボボックス内の選ぶものによって違う数字が代入される。 Dim a As Date Dim b As Long a = TimeSerial(CInt(TextBox5.Text), CInt(TextBox6.Text), 0) - TimeSerial(CInt(TextBox3.Text), CInt(TextBox4.Text), 0) Label6.Caption = Hour(a) + Minute(a) / 60 Label7.Caption = (Hour(a) + Minute(a) / 60) * @

  • エクセルで16進数に代入したい。

    こんにちは、tuneoです。 エクセルで、テキストボックスを表示して、 そこに例えば「8F」と入力した文字を バイト型変数として式に代入したいのです。 例えば、テキストボックスとボタン1を配置して、 ボタン1を押すと、 バイト型配列変数 Dim a(3) as Byte に a(0)=&h8F というように代入したいのです。 出来れば、テキストボックスに 「8F0E5BAF」と入力すると a(0)=&h8F a(1)=&h0E a(2)=&h5B a(3)=&hAF と代入できるとさらにOKなのですが。。。。

  • Javascriptで算術演算子を作っているのですがわかりません・・・

    あの、JavaScriptの課題で、算術演算子つくり、加算、減算、乗算、除算、整数の除算の商と余りが求めれるように、a bにそれぞれ数値を代入して計算開始というのを作りました。それで、数値以外のたとえば、アルファベットなどを代入した場合、それは数値ではありません、数値を代入してくださいというような数値の入力を促すようになるようにしたいのですが、エラーばかりでます。どのようにソースを打ったら良いのかさっぱりわかりません。教えてください!!よろしくおねがいします。

  • 論理演算について教えて下さい。

    基本的な論理演算について教えて下さい。 例えば、変数aにTrueを、変数bにNullを代入し、 a and b をした場合、Nullになるのは、わかるんですが、 a or b をした場合、なんでTrueになるんですか? 又、変数aにFalseを、変数bにNullを代入し、 a or b をした場合、Nullになるのは、わかるんですが、 a and b をした場合、なんでFalseになるんですか? お願いです。教えて下さい。。。 理由がわかりません。。。。

専門家に質問してみよう