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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

283閲覧

APIのレスポンス結果をTextLabelに反映する

pftyuk

総合スコア52

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2018/07/28 03:14

前提・実現したいこと

Swift初心者です。
表題の通りとあるAPIの結果をTextLabelのtextに反映させたいのですが
リクエストを投げてから結果が返ってくるまでに時間がかかるので
textが変更されるまでに時間がかかってしまいます。そのため数秒の間は
TextLabelのtextのデフォルト値が表示されてしまっている状態なので
もっと早い段階でtextの値を変更したいのですが可能でしょうか?

現在以下のメソッドを必要なパラメータを渡して
viewDidLoadで呼んでいる状態です。

Swift初心者で右も左もわからない状態なので
どなたかご教示頂けたら幸いです。
宜しくお願い致します。

swift

1private func RequestGetDetailOfVenues(id:String,parameter:[String:String]){ 2 let client = FoursquareAPIClient(clientId: CLIENT_ID, clientSecret: CLIENT_SECRET) 3 4 client.request(path: "venues/(id)", parameter: parameter){ result in 5 switch result { 6 case let .success(data): 7 print("成功") 8 let json = JSON(data) 9 print(json) 10 let venueJson = json["response"]["venue"] 11 12 if venueJson.isEmpty{ 13 print("詳細なし") 14 }else{ 15 print("詳細あり") 16 let venueDetail = VenueDetail(venueDetailJson: venueJson) 17 //ここのテキストの変更が行われるまでに時間がかかる 18 self.nameLabel.text = venueDetail.getName() 19 self.genreLabel.text = venueDetail.getCategory() 20 21 if venueDetail.getIsOpen(){ 22 self.isOpenLabel.text = "営業中" 23 self.isOpenLabel.textColor = UIColor.white 24 self.isOpenLabel.backgroundColor = UIColor.green 25 }else{ 26 self.isOpenLabel.text = "営業時間外" 27 self.isOpenLabel.textColor = UIColor.white 28 self.isOpenLabel.backgroundColor = UIColor.red 29 } 30 } 31 case let .failure(error): 32 print("失敗") 33 switch error { 34 case let .connectionError(connectionError): 35 print(connectionError) 36 case let .responseParseError(responseParseError): 37 print(responseParseError) 38 case let .apiError(apiError): 39 print(apiError.errorType) 40 print(apiError.errorDetail) 41 } 42 } 43 } 44 }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/28 03:25 編集

ラベルに何を表示させたいのでしょうか? 処理が呼ばれる前にself.nameLabel.text = "表示させたい固定文字列"?storyboard?で初期値書き換え?それとも画面全体に処理中クルクル?
pftyuk

2018/07/28 03:27

返信ありがとうございます。表示させたいのは処理が呼ばれる前にself.nameLabel.text = "APIのレスポンス結果のとある文字列"になります。nameLabelはMainStoryBoardに配置してあるTextLabelです。
退会済みユーザー

退会済みユーザー

2018/07/28 03:39

APIからのレスポンス取得完了前にそのレスポンスの中の一部の情報を表示したいということですか。
pftyuk

2018/07/28 03:46

いえAPIからのレスポンス取得完了後で宜しいのですがViewがレンダリングされる段階でAPIで取得した情報も表示されてる状態にしたいです。今viewDidLoadに全て処理を書いておりますが、viewが表示されてからAPIに対してリクエストを送り、その結果をtextLabelに反映しているので、目に見えてから1・2秒してからテキストが変わってしまうので、その画面になったら既にレスポンスの文字列がセットされている状態にしたいのですが、そもそも可能なのでしょうか
退会済みユーザー

退会済みユーザー

2018/07/28 03:56

私ではすぐにお役に立てそうにありません。申し訳ありません。
pftyuk

2018/07/28 03:59

とんでもございません。ご返信ありがとうございました。
guest

回答1

0

ベストアンサー

初期値に

Swift

1self.isOpenLabel.layer.opacity = 0.0

として透明にしておいて、Successの処理の最後に

Swift

1self.isOpenLabel.layer.opacity = 1.0

とすれば実現できそうです。

投稿2018/07/28 07:23

nakasho_dev

総合スコア2655

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

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

pftyuk

2018/07/28 07:34

返信ありがとうございます。 今早速試してみたところ、期待通りの結果となりました! お答え頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問