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

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

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

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Swift

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

Q&A

解決済

1回答

968閲覧

URLSessionの「data」をアンラップする理由【Swift】

kazuki_user

総合スコア147

iOS

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Swift

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

0グッド

0クリップ

投稿2020/08/17 09:36

編集2020/08/17 09:37

## URLSessionの「data」をアンラップする理由

guard let data = data else { return }

なぜ「data」はオプショナル型なのか、を教えて頂きたいです。

## コード

swift

1class PersonApi { 2 3 func getRandomPersonUrlSession() { 4 5 guard let url = URL(string: PERSON_URL) else { return } 6 7 let task = URLSession.shared.dataTask(with: url) { (data, responce, error) in 8 9 guard error == nil else { 10 debugPrint(error?.localizedDescription) 11 return 12 } 13 14 guard let data = data else { return } 15 16 17 print("Data = (data)") 18 print("Responce = (responce)") 19 } 20 21 task.resume() 22 23 } 24 25} 26

質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????

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

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

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

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

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

guest

回答1

0

ベストアンサー

guard let data = data else { return }

なぜ「data」はオプショナル型なのか、を教えて頂きたいです。

こういうときには公式のドキュメントを参考にするといいかと思います。

Discussion

By creating a task based on a request object, you can tune various aspects of the task’s behavior, including the cache policy and timeout interval.
(中略)
If the request completes successfully, the data parameter of the completion handler block contains the resource data, and the error parameter is nil. If the request fails, the data parameter is nil and the error parameter contain information about the failure. If a response from the server is received, regardless of whether the request completes successfully or fails, the response parameter contains that information.

If the request fails, の行にあるように、

リクエストに失敗した場合には、dataパラメータは nil となり、error パラメータは失敗原因に関する情報を含めた内容となります。

ということですので、(根本的な)問い合わせに失敗した場合には nil が入るようになっています。

もちろん、問合せに成功してもサーバが 404 などのエラーを戻す場合には、data には失敗した理由を表示するコンテンツの内容が入ることもありますので、そのような場合には response の方も調べる必要があると思います。

投稿2020/08/17 10:47

TsukubaDepot

総合スコア5086

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

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

kazuki_user

2020/08/17 11:03

ご回答ありがとうございました。 これからは、もっと公式を参考にしたいと思います。????‍♂️
TsukubaDepot

2020/08/17 11:06

Xcode であれば、わからないメソッドにマウスポインタを移動させ、Option + クリックですぐにヘルプが出ますし、そこからオンラインドキュメントにもすぐに移動できますので、併用させるのがいいかと思います。
kazuki_user

2020/08/17 12:54

確認いたしました。 参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問