Skip to content

alexpaul/Jokes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Jokes

Using URLSession to fetch web API data.

Here we are using URLSession to fetch data from the Jokes API.

static func fetchJokes(completion: @escaping (Result<[Joke], NetworkError>) -> ()) {
    let endpointURLString = "https://official-joke-api.appspot.com/jokes/programming/ten"
    
    // creating a URL from the given endpoint string above
    guard let url = URL(string: endpointURLString) else {
      completion(.failure(.badURL(endpointURLString)))
      return
    }
    
    // Use URLSession to get back JSON data (GET request) from the Jokes web API
    
    // by default URLSession dataTask is suspended - meaning request is pending
    // to perform request you have to resume() the dataTask
    let dataTask = URLSession.shared.dataTask(with: url) { (data, response, error) in
      
      // check for errors
      if let error = error { // if error is nil there was no network error
        completion(.failure(.networkClientError(error)))
      }
      
      // downcast to HTTPURLResponse to get access to the statusCode
      guard let urlResponse = response as? HTTPURLResponse else {
        completion(.failure(.noResponse))
        return
      }
      
      guard let data = data else {
        completion(.failure(.noData))
        return
      }
      
      // find out what's the status code
      switch urlResponse.statusCode { // statusCode in an Int
      case 200...299: break // everything went well
      default:
        completion(.failure(.badStatusCode(urlResponse.statusCode)))
      }
      
      // use data to create our Joke model
      do {
        let jokes = try JSONDecoder().decode([Joke].self, from: data)
        completion(.success(jokes))
      } catch {
        completion(.failure(.decodingError(error)))
      }
    }
    dataTask.resume()
  }

About

Using URLSession to fetch web API data.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages