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

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

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

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

Swift

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

Q&A

0回答

1461閲覧

【Swift】Alamofireを使ったHTTP通信を実行したく、コードを書き換えたい。

kazuki_user

総合スコア147

iOS

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

Swift

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

0グッド

0クリップ

投稿2020/09/15 06:05

編集2020/09/20 04:59

## やりたいこと

Missing return in a function expected to return 'URLSessionTask?'
エラーを解決して、Alamofireを使ったHTTP通信を実行したい。

URLSessionから、Alamofireを使ったHTTP通信のコードに書き換えた際に、
エラーが発生しました。

## 試したこと

URLSessionの書き換え(下記コード、コメントアウト箇所)

完了ハンドラのerrorHandler: @escaping (Error?) -> ()) -> URLSessionTask?辺りが原因だと思います。

完了ハンドラやHTTP通信の挙動について、まだ分からないことが多く恐縮ですが、
解決策を教えて頂けると幸いです。

## エラー

swift

1Missing return in a function expected to return 'URLSessionTask?'

## コード

swift

1// SearchRootVC 2 3var task: URLSessionTask? 4 5// word, completion, errorHandler 3つの引数をメソッドに渡す。 6 task = SearchAPI.getRandomRepoUrlSession(query, completionHandler: { items in 7 self.repo = items 8 DispatchQueue.main.async { 9 // UIを更新する処理 10 self.tableView.reloadData() 11 } 12 }, errorHandler: { error in 13 debugPrint(error?.localizedDescription ?? "") 14 })

swift

1// MARK: - クラスメソッドとして定義 2class SearchAPI { 3 // staticとして宣言すると、クラスのインスタンス化が不要。 4 static func getRandomRepoUrlSession(_ query: String, completionHandler completion: @escaping ([[String: Any]]) -> (), errorHandler: @escaping (Error?) -> ()) -> URLSessionTask? { 5 6 let repositoryUrl = githubBaseUrl + query 7 guard let url = URL(string: repositoryUrl) else { return nil } 8 9 Alamofire.request(url).responseJSON { response in 10 11 guard let data = response.data else { return } 12 13 guard let json = response.result.value as? [String: Any], 14 let items = json["items"] as? [[String: Any]] 15 else { return } 16 17 do { 18 completion(items) 19 } catch { 20 // MARK: - 処理をクロージャに任せる 21 errorHandler(error) 22 } 23 } 24 25 // // MARK: - URLSessionを使って、HTTP通信 26 // let task = URLSession.shared.dataTask(with: url) { (data, responce, error) in 27 // 28 // guard error == nil else { 29 // // MARK: - 処理をクロージャに任せる 30 // errorHandler(error) 31 // return 32 // } 33 // 34 // guard let data = data else { return } 35 // 36 // // try!は、例外が発生したときにはクラッシュするので修正。(-> エラーが起こり得ないケースでのみ使用可) 37 // // try?で例外を安全に無視できるが、エラーを表示するため do-catch を使用。 38 // 39 // do { 40 // let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] 41 // if let items = json?["items"] as? [[String: Any]] { 42 // // MARK: - 処理をクロージャに任せる 43 // completion(items) 44 // // MARK: - 以下の処理はクロージャに任せる 45 // // self.repo = items 46 // // // DispatchQueue で一つ以上のタスクを管理し、async で複数のAPIの非同期通信を実行。 47 // // DispatchQueue.main.async { 48 // // // UIを更新する処理 49 // // self.tableView.reloadData() 50 // // } 51 // } 52 // } catch { 53 // // MARK: - 処理をクロージャに任せる 54 // errorHandler(error) 55 // } 56 // } 57 // task.resume() 58 // 59// return task 60 } 61} 62

## 参考サイト

Missing return in a function expected to return 'NSURLSessionDataTask'

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問