Skip to content

Instantly share code, notes, and snippets.

View tranhieutt's full-sized avatar

Tran Trung Hieu tranhieutt

View GitHub Profile
@tranhieutt
tranhieutt / swift_protocol_extension_1.swift
Created July 12, 2017 03:31
Example protocol-extension-generic
//Declare class
class Cat {
var name: String
init(name: String) {
self.name = name
}
}
class Dog {
var name:String
extension Cat: Pet {}
extension Dog: Pet {}
let pets: [Pet] = [Cat(name: "Mistten"), Dog(name: "Yeeker")]
func herd<Animal: Cat> (_ cats: [Animal]) {
cats.forEach {
print("Here,cat, \($0.name)! come here")
}
}
func herd<Animal: Dog> (_ dogs: [Animal]) {
dogs.forEach {
print("Here, dog, \($0.name)! come here")
}
}
class Handler {
func handle() {
let data = requestDataToAPI()
let array = parse(data: data)
saveToDB(array:array)
}
private func requestDataToAPI() -> Data {
//send API request and wait the response
}
class Handler {
let apiHandler: APIHandler
let parseHandler: ParseHandler
let dbHandler: DBHandler
init(apiHandler: APIHandler, parseHandler:parseHandler, dbHandler:DBHandler) {
self.apiHandler = apiHandler
self.parseHandler = parseHandler
self.dbHandler = dbHandler
}
class Logger {
func printData() {
let cars = [
Car(name: "BWM", color: "Green"),
Car(name: "Toyota", color: "Blue"),
Car(name: "Honda", color: "Black")
]
cars.forEach { cars in
print(car.printDetails())
class Logger {
func printData() {
let cars = [
Car(name: "BWM", color: "Green"),
Car(name: "Toyota", color: "Blue"),
Car(name: "Honda", color: "Black")
]
cars.forEach {cars in
print(cars.printDetails())
//SOLID - O
protocol Printable {
func printDetails() -> String
}
class Logger {
func printData() {
let vehices: [Printable] = [
Car(name: "BWM", color: "Green"),
Car(name: "Toyota", color: "Blue"),
Car(name: "Honda", color: "Black"),
//Not preferred:
class MyViewController: UIViewController, UITableViewDataSource, UIScrollViewDelegate {
// all methods
}
//Preferred:
class MyViewController: UIViewController {
// class stuff here
}
// MARK: - UITableViewDataSource
//Preferred:
if user.isHappy {
// Do something
} else {
// Do something else
}
//Not Preferred:
if user.isHappy
{