Skip to main content
Version: 1.4.4

How to Use

Basically, you need two files to assemble your requests and put Base_URL, Protocol and Environment in your info.plist.

Info.plist​

Yout Plist

You have 3 types of Environments for you choose.

enum EnvironmentCase: String {
case production = "production"
case sandbox = "sandbox"
case mock = "mock"
}

In sandbox and mock you will see logs of the VFNetwork itself.

AppDelegate.swift​

By default VFNetwork has some configuration but you can customize it in two ways.

Fast and Custom.​

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

// Fast way
VFNetwork.shared.configure([
.timeout(10.0)
])

// Custom Way
VFNetwork.shared.session {
let config = URLSessionConfiguration.default
config.urlCache = .shared
config.urlCredentialStorage = nil
config.httpCookieAcceptPolicy = .always
config.requestCachePolicy = .reloadRevalidatingCacheData
config.timeoutIntervalForRequest = .init(10.0)

if #available(iOS 11.0, *) {
config.waitsForConnectivity = false
}

return config
}

return true
}

and now you can create two files for use.

HomeAPI.swift​

Here you will configure your requests.


import VFNetwork

enum HomeAPI {
case joke
case categories
}

extension HomeAPI: APIBuilder {

var path: URLPath {
switch self {
case .joke:
return .plain("jokes/random")
case .categories:
return .plain("jokes/categories")
}
}

var httpMethod: HTTPMethods {
switch self {
case .joke, .categories:
return .get
}
}

var headers: HTTPHeader {
.custom([
.bearer("yourToken"),
.basic("yourBase64"),
.header("custom", "header")
])
}

var task: HTTPTask {
switch self {
case .joke, .categories:
return .request
}
}

HomeService.swift​

And here you will execute your requests.

import VFNetwork

class HomeService: RequestService<HomeAPI> {
func getJoke(completion: @escaping (Result<JokeModel, Error>) -> Void) {
execute(.joke, responseType: JokeModel.self, completion: completion)
}

func getCategories(completion: @escaping (Result<CategoryModel, Error>) -> Void) {
execute(.categories, responseType: CategoryModel.self, completion: completion)
}
}