Skip to content

Instantly share code, notes, and snippets.

View pjwelcome's full-sized avatar

Peter-John Welcome pjwelcome

View GitHub Profile
protocol ProductsRepositoryInjectable {
var products : ProductsRepository {get}
}
extension ProductsRepositoryInjectable {
var products : ProductsRepository {
return ProductsRepositoryImplementation()
}
struct ProductViewModel: ProductsRepositoryInjectable {
init() {
self.products.fetchProducts().forEach {
print("This \($0.name) costs R\($0.price)")
}
}
}
ProductViewModel()
struct ProductsRepositoryImplementation : ProductsRepository {
func fetchProducts() -> [Product] {
return [Product(name: "Adidas Sneakers", price: 2030.0), Product(name: "Nike Sneakers", price: 1000.0)]
}
}
//: Playground - noun: a place where people can play
import UIKit
//ARC (Weak and Strong reference)
class User : NSObject {
let name : String = ""
weak var surname : NSString? = ""
}
public protocol Registrable {
func register<T>(depedency: T.Type, implemenation: @escaping () -> T, objectScope: ObjectScope)
}
public protocol Resolvable {
func resolve<T>(_ dependency: T.Type) -> T
func reset()
}
class DepedencyContainer {
private let container = Container()
public static let instance = DepedencyContainer()
}
extension DepedencyContainer : Registrable {
public func register<T>(depedency: T.Type, implemenation: @escaping () -> T, objectScope: ObjectScope = .graph) {
container.register(depedency, factory: { _ in implemenation() }).inObjectScope(objectScope)
}
}
extension DepedencyContainer : Resolvable {
public func resolve<T>(_ dependency: T.Type) -> T {
guard let implementation = container.resolve(dependency) else {
fatalError("Nothing to Resolve")
}
return implementation
}
public func reset() {
class Resolver {
private static var container: Resolvable = DepedencyContainer.instance
}