URL(string: bookListsURL)! var urlRequest: URLRequest = URLRequest(url: url) urlRequest.httpMethod = HTTPMethod.get.rawValue 16 Rolling your own network stack by @glennersboofy
in guard error == nil else { //Handle error //Show user something return } guard let data: Data = data else { return } //do stuff with the new data } dataTask.resume() 19 Rolling your own network stack by @glennersboofy
bookListsURL)! var urlRequest: URLRequest = URLRequest(url: url) urlRequest.httpMethod = HTTPMethod.get.rawValue let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in guard error == nil else { //Handle error //Show user something return } guard let data: Data = data else { return } //do stuff with the new data } dataTask.resume() 20 Rolling your own network stack by @glennersboofy
let urlString: String = "\(host)\(route)?api-key=\(APIKeys.nyt)" let url: URL = URL(string: urlString)! var urlRequest: URLRequest = URLRequest(url: url) urlRequest.httpMethod = httpMethod.rawValue urlRequest.httpBody = body urlRequest.addValue("application/json", forHTTPHeaderField: "Accept") return urlRequest } ... } 25 Rolling your own network stack by @glennersboofy
switch self { case .bestSellerCategories: return "lists/names" } } private var httpMethod: HTTPMethod { switch self { case .bestSellerCategories: return .get } } ... } 26 Rolling your own network stack by @glennersboofy
{ (data, response, error) in guard error == nil else { // Handle error return } guard let data: Data = data else { return } // Do some stuff with that data } dataTask.resume() 29 Rolling your own network stack by @glennersboofy
[weak self] (data, response, error) in guard let self = self else { return } if let error: Error = error { self.completion?(Result.failure(error)) } else { self.completion?(Result.success(data)) } } task.resume() } 37 Rolling your own network stack by @glennersboofy
set } } enum OperationState: String { case none case ready = "isReady" case executing = "isExecuting" case finished = "isFinished" } 38 Rolling your own network stack by @glennersboofy
bestSellersCategories) { result in switch result { case .success(let data): if let data: Data = data { // Do some stuff with that data } case .failure(let error): // oh no. } } NetworkService.shared.add(op) 39 Rolling your own network stack by @glennersboofy
approach • Introduce: • APIRouter • Rudimentary NetworkService and NetworkOperation • Generic-ify everything! 43 Rolling your own network stack by @glennersboofy
{ result in switch result { case .success(let bestSellerList): // Woo! we have some usable data now case .failure(let error): // wah wah } } NetworkService.shared.add(op) 47 Rolling your own network stack by @glennersboofy
approach • Introduce: • APIRouter • Rudimentary NetworkService and NetworkOperation • Generic-ify everything! 49 Rolling your own network stack by @glennersboofy