Swift4でのURLSessionTaskを用いたAPIからのデータ取得について。
【やりたいこと】
ViewControllerクラスの変数dataにGetDataFromAPIクラスのgetDataFromAPI関数で取得したデータを格納したい。
【つまづいている点】
クロージャ内の変数の返し方がわからずうまくいっていません。
一週間ほどこの部分の実装が出来ず、開発が止まっております。
よろしくお願いいたします
ViewController.swift
import UIKit
class ViewController: UIViewController {
var data:String = ""
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let getDataObject = GetDataFromAPI()
let returnData = getDataObject.getDataFromAPI()
data = returnData
print("data:\(data)")
}
}
GetData.swift
import Foundation
struct JsonData:Codable{
//今回返ってくるJSONは「{"key":"value"}」
let key:String
}
class GetDataFromAPI {
var formatedData:String = ""
func getDataFromAPI() -> String{
let url: URL = URL(string:"http://127.0.0.1:5000/study")!
let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
let task: URLSessionTask = URLSession.shared.dataTask(with: url, completionHandler: {data, response, error in
let decoder: JSONDecoder = JSONDecoder()
do {
let data:JsonData = try decoder.decode(JsonData.self, from: data!)//取ってきたデータが格納されている
print("データの取得しました")
self.formatedData = data.key
print(self.formatedData)
} catch {
print("error:", error.localizedDescription)
}
})
task.resume()//実行する
return self.formatedData
}
}