如何将网络类中的数据提取到同一类中的变量中,以便从ios中的其他类访问



如何将网络类中的数据提取到同一类中的变量中,以便在ios 中从其他类访问

网络类代码


import Foundation
struct NetworkManager {
func fetchData(url : String) {
print("Neeraj here")
let sessionURL = URL(string: url)
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: sessionURL!) { (data, response, error) in
if error == nil {
if let safeData = data {
if let parsedData = self.parseData(data : safeData) {
print("got data")
}
}
}
else {
print("error in data task is (String(describing: error))")
}
}
dataTask.resume()

}

func parseData(data : Data) -> DataModel? {
let decoder = JSONDecoder()
do {
let decodedData = try decoder.decode(DataModel.self, from: data)
return decodedData
} catch {
print("error while parsing data (error)")
return nil
}
}
}

在我获取数据的地方,我希望数据存储在某个地方或同一个类中,这样我就可以从我调用此方法的类访问它fetchData

您可以使用闭包返回函数外的值。这种做法是函数式编程,几乎用于异步函数。

func fetchData(url: String, completion: (DataModel?) -> ()) {
...
if let parsedData = self.parseData(data : safeData) {
print("got data")
completion(parsedData)
} else {
completion(nil)
}
}

然后,使用它:

NetworkManager().fetchData(url: "https://google.com", completion: { data in
// handle the “data”
})

最新更新