Dependency Injection
Dependency injection in swift is a design pattern achieved by designing your code in a way that your objects or functions receive objects that they depend on, instead of creating their own and avoid loosely coupled
We are going to explore Example such as
1. Constructor injection
2. Property injection
These two are the types of dependency injection that are used most of the time in swift programming language and if you use them during ios development your code program will have no hidden dependency. This swift Example has easy to understand dependency injection concept.
This Example Class Event has Hidden Dependency of HttpClient Create in function object internal. Only getEventRecord function have know Dependency HttpClient. let client: HttpClient = HttpClient() is a hidden Dependency
import Foundation
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
//MARK: - Depandency Injection
struct ApiUrl {
static let getUrl = "https://reqres.in/api/users?page=2"
}
class HttpClient {
func getDataResponse(url: URL, completionHandler: @escaping(_ data: Data?) -> Void){
URLSession.shared.dataTask(with: url) { dataResponse, urlResponse, error in
completionHandler(dataResponse)
}.resume()
}
}
class Event {
func getEventRecord(){
let client: HttpClient = HttpClient() //Loose coupling
client.getDataResponse(url: URL(string: ApiUrl.getUrl)!) { responseData in
if responseData?.count != 0{
print("Response Data ===> \(responseData?.count ?? 0)")
}
}
}
}
let event = Event()
event.getEventRecord()
//MARK: - Output With out Depandency Injection with //Loose coupling
//Response Data ===> 1030
1 Dependency Injection Property injection
Now Change With class property of HttpClient is option
class Event {
var client: HttpClient? = nil
func getEventRecord(){
client?.getDataResponse(url: URL(string: ApiUrl.getUrl)!) { responseData in
if responseData?.count != 0{
print("Response Data ===> \(responseData?.count ?? 0)")
}
}
}
}
let event = Event()
event.client = HttpClient()
event.getEventRecord()
1 Dependency Injection Constructor injection
Now Change With Class Event Constructor init of HttpClient
class Event {
var client: HttpClient? = nil
init(_ client: HttpClient){
self.client = client
}
func getEventRecord(){
client?.getDataResponse(url: URL(string: ApiUrl.getUrl)!) { responseData in
if responseData?.count != 0{
print("Response Data ===> \(responseData?.count ?? 0)")
}
}
}
}
let event = Event(HttpClient())
event.getEventRecord()
Comments
Post a Comment