Skip to content

Instantly share code, notes, and snippets.

final class NetworkManager {
let baseURL: String
private var session = URLSession(configuration: URLSessionConfiguration.default,
delegate: nil,
delegateQueue: nil)
private let queue = DispatchQueue(label: "com.organization.network-manager", attributes: .concurrent)
protocol RouteProtocol {
var stringValue: String { get }
var method: String { get }
}
extension RickAndMortyService {
enum CharacterRoute: RouteProtcol {
case id(Int)
case base([Filters])
var stringValue: String {
switch self {
case .id(let id):
return "character/\(id)"
enum RickAndMortyService {
static let baseURL = "https://rickandmortyapi.com/api/"
static let manager = NetworkManager(baseURL: baseURL)
}
enum RickAndMortyService {
static let baseURL = "https://rickandmortyapi.com/api/"
}
struct Character: Codable {
let id: Int
let name: String
let status: String
let url: String
let species: String
let type: String
let gender: String
}
static func searchBy(id: Int, completion: @escaping(Character?, Error?) -> ()) {
manager.sendRequest(route: Self.id(id), decodeTo: Character.self) { completion($0, $1)}
}
static func searchWith(filters: [Filters], completion: @escaping([Character]?, Error?) -> ()) {
struct SearchWithFiltersResponse: Decodable {
let info: Info
let results: [Character]
}
struct Info: Decodable {
let count: Int
let pages: Int
let next: String?
let prev: String?
}
RickAndMortyService.CharacterRoute.searchBy(id: 2) { character, error in
}
RickAndMortyService.CharacterRoute.searchWith(filters: [.name("morty")]) { characters, error in
}
import UIKit
final class TransitionDelegate: NSObject,
UIViewControllerTransitioningDelegate {
private let interactiveController = UIPercentDrivenInteractiveTransition()
private let duration = CATransaction.animationDuration()
func presentationController(forPresented presented: UIViewController,