Skip to content

Instantly share code, notes, and snippets.

View TungVuDuc2805's full-sized avatar
💭
Learning

Tung Vu Duc TungVuDuc2805

💭
Learning
View GitHub Profile
protocol ProfileSectionControllerProtocol {
var title: String {get}
var cells: [ProfileCellProtocol] {get set}
var rowCount: Int {get}
init(title: String, cells: [ProfileCellProtocol])
}
let wifiLoader = WifiLoader(url: URL(string: http://api.com/wifi/posts)!)
let cellularLoader = CellularLoader(url: URL(string: http://api.com/wifi/cellular)!)
let localLoader = LocalLoader()
let compositeLoader = CompositeStrategy(wifiLoader: wifiLoader, cellularLoader: cellularLoader, localLoader: localLoader)
let viewController = PostViewController(loader: compositeLoader)
class CompositeStrategy : Strategy {
let wifiLoader: WifiLoader
let cellularLoader: CellularLoader
let localLoader: LocalLoader
init(wifiLoader: WifiLoader, cellularLoader: CellularLoader, localLoader: LocalLoader){
self.wifiLoader = wifiLoader
self.cellularLoader = cellularLoader
self.localLoader = localLoader
}
class PostViewController {
private let loader: Loader
init(loader: Loader){
self.loader = loader
}
func loadFeed(){
loader.load()
}
protocol Strategy {
func algorithm()
}
class ConcreteStrategyA: Strategy {
func algorithm() {...}
}
class ConcreteStrategyB: Strategy {
func algorithm() {...}
protocol Loader {}
class RemoteLoader: Loader {...}
class LocalLoader: Loader {...}
class ViewControllerA {
private var loader: Loader?
init(){
class APIServce {
.....
func load(url: URL, completion: @escaping (Result<Article, Error>) -> Void) {
// fetch articles from remote
}
}
class HTTPClient {
var session: URLSession = .shared
init() {}
}
let client = HTTPClient()
client.session = URLSession(configuration: .ephemeral)
class ListMovieViewModel {}
class ListMovieController {
private let viewModel: ListMovieViewModel
init(viewModel: ListMovieViewModel) {
self.viewModel = viewModel
}