質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

596閲覧

Swift4で条件をつけて文字の色を変えたい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/02/04 07:38

編集2019/02/04 08:33

一定条件を満たした時だけ、ビルドをかけた際表示される文字を赤くしたいです。
コードの一部はこのような感じです。

Swift4

1@IBOutlet weak var label: UILabel! 2 @IBOutlet weak var label2: UILabel! 3 @IBOutlet weak var label3: UILabel! 4 5func kaku(str:String,str2:String,kousin:String){ 6 //温度、湿度を値によって色をかえるようにしたい 7 label.text = String(str) 8 //label.textColor = str >= 26 ? .red : .black //エラーでました 9 label2.text = String(str2) 10 //日付け情報修正 11 if kousin == "未取得"{ 12 label3.text = String(kousin) 13 } 14 else{ 15 var kousin = String(kousin.prefix(19)) 16 if let range = kousin.range(of:"T"){ 17 kousin.replaceSubrange(range,with:" ") 18 print(kousin) 19 label3.text = String(kousin) 20 } 21 } 22 23 }

天気APIを使って温度・湿度を取得するまではできています。
26度以上になった時にだけ文字の色を変えたいです。

追記
訳が分からなくなってきたので、相方のプログラマーに聞きました。Stringでなければいけないのは天気APIで温度を持ってくる際、intだとうまくいかないからだそうです。
なんとかキャストを行ってint型に直し、文字の色を変えて欲しいとの事です・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2019/02/04 07:58

何が分からないのでしょうか? 「文字色の変更方法が分からない」という質問でしょうか?
退会済みユーザー

退会済みユーザー

2019/02/04 08:00

天気APIを用いて温度を取得し、表示させたいです。その表示させる温度が26度以上であった場合、黒文字から赤文字に変更して表示したいです。 26度以下であるならば黒文字のまま表示したいです。
fuzzball

2019/02/04 08:05

それはあなたがやりたいことです。 この質問では具体的に何を聞いているのでしょうか? あなたのコードには文字色を変更するコードが書かれていないので、 >>「文字色の変更方法が分からない」という質問でしょうか? と聞きました。
退会済みユーザー

退会済みユーザー

2019/02/04 08:08

すみません。そういう事です。 一定の条件を満たした時にだけ色を変える方法がわかりません。
fuzzball

2019/02/04 08:11

だから、なんで2つの質問をくっつけるのかな。 「一定の条件を満たした時」 → すでにコードに書かれている 「色を変える方法」 → コードに書かれていない なので、質問は「色を変える方法」でしょ?
退会済みユーザー

退会済みユーザー

2019/02/04 08:12

ごめんなさい。質問し直します。
fuzzball

2019/02/04 08:13

し直さなくていいです。もう解決するでしょうから。 したいならこの質問を編集して下さい。
退会済みユーザー

退会済みユーザー

2019/02/04 08:19

無知で本当にごめんなさい。編集しました。
fuzzball

2019/02/04 08:21

なんでStringのコード書いてるのやら‥わけわからん。
takabosoft

2019/02/04 08:23

わたしもお手上げ
退会済みユーザー

退会済みユーザー

2019/02/04 08:28

相方のプログラマーが書いたものなので私もよくわからないんです・・・ ただ「26度以上になったら色変えて」とだけ言われてるんです。正直なんでstringなのか私もよくわかりません。 int型にしないのか?と聞いたのですが「これじゃないとうまくいかない」と言われるばかりで・・・
takabosoft

2019/02/04 08:42 編集

JSONか何かをパースしていてInt型にするとJSONと型が一致せずに例外が出るって意味では? ちなみに文字列から整数への変換はググればすぐでます。
fuzzball

2019/02/04 08:41

takabosoftさんへの返信とかおかしいでしょ。 「表示がうまくいかなかったのでstring型にしました」って嘘ってこと? takabosoftさん「Int型に戻せば回答欄のコードは通りますよ。」 あなた「ありがとうございます。試してみます。」 ってやり取りは何だったの?
退会済みユーザー

退会済みユーザー

2019/02/04 08:49

確認してきました。JSONを使って持ってきた値で合ってるみたいです。Swiftの画面に使って表示をしているらしいのですが、処理に時間がかかるのと、予期せぬnilが検出されてしまい、表示だけができなかったらしいです。 最初に「未取得」と表示しておいて、更新ボタンを押すと温度・湿度を表示させる方法にしたそうです。 その「未取得」を表示させるためにstring型でないとJSONで持ってきた温度・湿度とうまく噛み合わなかった、という事らしいです。
退会済みユーザー

退会済みユーザー

2019/02/04 08:54

fuzzballさん 嘘ではありません。ちゃんと相方に確認して返ってきた答えです。そのまま書いてしまったために誤解を招いてしまいました。 申し訳ありません。
fuzzball

2019/02/04 08:59

で、結局何が分からないのでしょうか? StringからIntへの変換方法ですか?
takabosoft

2019/02/04 09:00

誤解というより、古いソース(?)を最初に提示したのがまずかったですね。 私の回答は正しかったはずなので。
takabosoft

2019/02/04 09:01

とりあえず文字列を整数に変換させるコードを書いてください。
退会済みユーザー

退会済みユーザー

2019/02/04 09:07

var str: String = "37" var intNum: Int = str.toInt()! 今はこんなコードです。黄色いエラー?警告?が出てます
fuzzball

2019/02/04 09:29

Swift4じゃないんですか?
退会済みユーザー

退会済みユーザー

2019/02/04 09:37

前のバージョンの構文でした。直したら動きました。
guest

回答3

0

ベストアンサー

@IBOutlet weak var label: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var label3: UILabel!

func kaku(str:String,str2:String,kousin:String){ //温度、湿度を値によって色をかえるようにしたい label.text = String(str) //label.textColor = str >= 26 ? .red : .black label2.text = String(str2) //日付け情報修正 if kousin == "未取得"{ label3.text = String(kousin) } else{ var kousin = String(kousin.prefix(19)) if let range = kousin.range(of:"T"){ kousin.replaceSubrange(range,with:" ") print(kousin) //色変え追記 var strdo:Double = Double(str)! if strdo >= 30.0 { //何度以上になったら label.textColor = .red //以上だったら赤 }else{ label.textColor = .black //違ったら黒 } label3.text = String(kousin) } } }

投稿2019/02/04 09:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

今のコードを活かすなら。

swift

1//一旦黒にしておいて 2label.textColor = .black 3if str >= 26 { 4 //超えていたら赤くする 5 label.textColor = .red 6 : 7 (他の処理) 8}

投稿2019/02/04 07:44

編集2019/02/04 08:19
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/04 07:55

修正しました
guest

0

label.text = String(str)

の下あたりに

label.textColor = str >= 26 ? .red : .black

と書いて実行するとどうですか?

投稿2019/02/04 07:43

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/04 07:54

Binary operator '>=' cannot be applied to operands of type 'String' and 'Int' というエラーが出ました
takabosoft

2019/02/04 08:00

func kaku(str:Int,str2:Int,kousin:String){ を信じるならstrはInt型のはずですが、変えましたか?
退会済みユーザー

退会済みユーザー

2019/02/04 08:02

表示がうまくいかなかったのでstring型にしました
takabosoft

2019/02/04 08:05

Int型に戻せば回答欄のコードは通りますよ。
退会済みユーザー

退会済みユーザー

2019/02/04 08:09

ありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問