In Swift, dependency injection for `URLSession` can be achieved through various approaches, enhancing testability and flexibility in your applications. Here are a few common methods:
Below is an example demonstrating initializer injection:
class NetworkManager {
let session: URLSession
init(session: URLSession = .shared) {
self.session = session
}
func fetchData(from url: URL, completion: @escaping (Data?) -> Void) {
let task = session.dataTask(with: url) { data, response, error in
guard error == nil else {
completion(nil)
return
}
completion(data)
}
task.resume()
}
}
// Usage
let mySession = URLSession(configuration: .default)
let networkManager = NetworkManager(session: mySession)
// Call fetchData with a valid URL
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?