Skip to content

Instantly share code, notes, and snippets.

View eofster's full-sized avatar

Alexey Kuznetsov eofster

View GitHub Profile
@eofster
eofster / WithoutDependencyInjection.swift
Last active November 17, 2015 09:54
Client-service relationship without dependency injection
protocol Service {}
class RealService: Service {}
class Client {
let service: Service
init() {
service = RealService()
}
}
@eofster
eofster / WithDependencyInjection.swift
Last active November 17, 2015 09:53
Client-service relationship with dependency injection
protocol Service {}
class RealService: Service {}
class Client {
let service: Service
init(service: Service) {
self.service = service
}
}
@eofster
eofster / DependencyInjectionExample.swift
Created November 17, 2015 13:40
Dependency injection example with tests
import Foundation
import XCTest
//////////////////////////////////////////////////////////////////////
// Preferences
protocol UserDefaults {
func stringForKey(key: String) -> String
}
@eofster
eofster / ViewControllerPropertyBasedDependencyInjection.swift
Created November 24, 2015 12:37
Property-based dependency injection in view controller
class ViewController: UIViewController {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == PhotoDetailViewControllerIdentifier {
if let viewController = segue.destinationViewController as? PhotoDetailViewController {
viewController.photo = Photo()
}
}
}
}
@eofster
eofster / ViewControllerPropertyBasedDependencyInjectionOneIfStatement.swift
Created November 24, 2015 12:42
Property-based dependency injection in view controller with one if statement
class ViewController: UIViewController {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == PhotoDetailViewControllerIdentifier,
let viewController = segue.destinationViewController as? PhotoDetailViewController {
viewController.photo = Photo()
}
}
}
@eofster
eofster / ViewControllerWithInitializerBasedDependencyInjection.swift
Created November 24, 2015 13:01
View controller with dependency injected in the initializer
class PhotoDetailViewController2: UIViewController {
let photo: Photo
init(photo: Photo) {
self.photo = photo
super.init(nibName: "PhotoDetailViewController2", bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) is not supported")
@eofster
eofster / UsageOfViewControllerWithInitializerBasedDependencyInjection.swift
Created November 24, 2015 13:03
Usage of view controller with dependency injected in the initializer
class ViewController2: UIViewController {
func showDetailWithPhoto(photo: Photo) {
showViewController(PhotoDetailViewController2(photo: photo), sender: self)
}
}
@eofster
eofster / ViewControllerWithPropertyBasedDependencyInjection.swift
Last active November 24, 2015 14:03
View controller with dependency injected in property
class PhotoDetailViewController: UIViewController {
var photo: Photo!
}
@eofster
eofster / ViewControllerWithPropertyBasedDependencyInjectionAndAbstractFactory.swift
Last active March 26, 2019 17:29
View controller with property-based dependency injection and abstract factory
import CoreData
import UIKit
struct Photo {}
class PhotoDetailViewController: UIViewController {
var photo: Photo!
var context: NSManagedObjectContext!
}
@eofster
eofster / WireframeAndViewControllerFactory.swift
Created December 1, 2015 15:28
Wireframe and view controller factory
class Wireframe {
let navigationController: UINavigationController
let viewControllerFactory: ViewControllerFactory
init(navigationController: UINavigationController, viewControllerFactory: ViewControllerFactory) {
self.navigationController = navigationController
self.viewControllerFactory = viewControllerFactory
}
func presentPhotoDetailsWithPhoto(photo: Photo) {