Dependency Injection (DI) is a design pattern used to achieve Inversion of Control (IoC) between classes and their dependencies. In Swift, it allows for more modular, testable, and maintainable code by decoupling the creation of an object's dependencies from the object itself.
Here's a simple example demonstrating constructor injection in Swift.
First, define a protocol for the dependency:
protocol NetworkService {
func fetchData()
}
class APIService: NetworkService {
func fetchData() {
print("Fetching data from API...")
}
}
Next, create a class that depends on NetworkService:
class DataManager {
private let networkService: NetworkService
init(networkService: NetworkService) {
self.networkService = networkService
}
func getData() {
networkService.fetchData()
}
}
Now, create an instance of APIService and inject it into DataManager:
let apiService = APIService()
let dataManager = DataManager(networkService: apiService)
dataManager.getData() // Output: Fetching data from API...