## やりたいこと
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'
質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????
あなたの回答
tips
プレビュー