Skip to main content

SOLID Principles in Swift - ( Single Responsibility Principle(SRP), Open/Closed Principle, Liskov Substitution Principle, Interface Segregation, Dependency Inversion)

 

SOLID Principles in Swift

  1. Single Responsibility Principle 
  2. Open/Closed Principle 
  3. Liskov Substitution Principle 
  4. Interface Segregation 
  5. Dependency Inversion

S - Single Responsibility Principle(SRP) 

Single Responsibility Principle (SRP) is that every class, module, or function in a program should have one responsibility(Task) in a program.


Example:-  A Simple Class For multiple Responsibility 


class SimpleHandler { 

    

    func simpleHandle() {        

        let data = requestToDataAPI()        

        let array = parseToResponse(data: data)        

        saveToDatabase(array: array)    

    }   

  

    private func requestToDataAPI() -> Data {        

        // Network request and wait the response    

        return Data()

    } 

    

    private func parseToResponse(data: Data) -> [String] {        

        // Parse the network response into array  

        return []

    }  

   

    private func saveToDatabase(array: [String]) {        

        // Save parsed response into database   

        print(array)

    }

}


This Simple class perform multiple Responsibility like first network, second parsing data and last loadData Binding data 


Example:-   It states that every module or Class should have only one responsibility.



class SrpHandler {

    let api: APIHandler

    let parse: ParsingData

    let datahander: DataHandler


    init(api: APIHandler, 

    parse: ParsingData, 

    datahander: DataHandler) {

        self.api = api

        self.parse = parse

        self.datahander = datahander

    }


    func handler(){

        let data = api.reqDataToApi()

        let array = parse.parseResponse(data: data)

        datahander.loadDataUI(array: array)

    }

}



// Network request and wait the response 

class APIHandler {

    func reqDataToApi() -> Data{

        return Data()

    }

}


// Parse the network response into array 

class ParsingData {

    func parseResponse(data: Data) -> [String]{

        return []

    }

}


// Save parsed response into database

class DataHandler {

    func loadDataUI(array: [String]){

        print(array)

    }

}


OOpen/Closed Principle

Open meansOpen for extension 

closed meansclosed for modification.



Open for Extension You should be able to extend or change the behavior of a class without effort. mean If you have to change in an existing class or change the behaviour.


Closed For Modification You must extend a class without changing the implematation



LLiskov Substitution Principle (LSP)

The Liskov Substitution principle :-  A Derived class should be substitutable for its base class without affecting the correctness of the program.
Or
If you have a reference to a base class,  you should be able to substitute a derived class without breaking the program.

Example: - 

import Foundation
 
class Rectangle {
    
    var width: Double
    var height: Double
    
    init(width: Double, height: Double){
        self.width = width
        self.height = height
    }
    
    func calculateArea()-> Double{
        return width * height
    }
}

class Square: Rectangle {
    
    override var width: Double {
        didSet{
            height = width
        }
    }
    
    override var height: Double{
        didSet {
            width = height
        }
    }
    
    init(side: Double){
        super.init(width: side, height: side)
    }
    
    func printArea(rectangle: Rectangle){
        let area = rectangle.calculateArea()
        print("Area : \(area)")
    }
}

let square = Square(side: 10.0)
printArea(rectangle: square)








 





















Comments

Popular posts from this blog

Add a Scene Delegate to your existing project with Storyboard in Swift

To add a scene delegate, first, create a new Swift file that you’ll call "SceneDelegate" containing a subclass of UIResponder, just like the AppDelegate, and that conforms to UIWindowSceneDelegate.  As your app might supports other versions than iOS 13, make this class only available for iOS 13. This is what you should have : If you are working a project that is storyboard based, please set storyboard  initial view controller SceneDelegate.swift import UIKit @available ( iOS 13.0 , *) class SceneDelegate : UIResponder , UIWindowSceneDelegate {     var window : UIWindow ?     func scene ( _ scene: UIScene , willConnectTo session: UISceneSession , options connectionOptions: UIScene . ConnectionOptions ) {                  let storyboard = UIStoryboard (name: "Main" , bundle: nil )         let initialViewController = storyboard. instantiateViewController (withIdentifier: "ViewController" )         let mainNavigationController = UINavigationControlle

How Create Animated Circle Progress Bar iOS 11 Swift 4

  Animated Circle Progress Bar iOS 11 Swift 4 With MBCircularProgressBa r - https://github.com/MatiBot/MBCircularProgressBar A circular, animatable & highly customizable progress bar from the Interface Builder Swift, Using pod fite MBCircularProgressBar Installation Cocoapods terminal. pod "MBCircularProgressBar" That - A Simple Steps to installed pod file -        Open terminal        Command on terminal go to project folder Cd path        set your project path on terminal.        command : pod init        open pod file - open -e podfile        added in pod file with in : pod "MBCircularProgressBar"        Command : Pod install        Close project of Xcode        open your Project from terminals        Command : open PodDemos.xcworkspace After opern StoryBoard and Now drag a UIView over the viewController in storyboard Or set UIView Constraint width, height or verticle or horzentail space and set a class MBCircul

How to Use Multiple Sections in UITableView iOS Swift !

Multiple sections in UITableView iOS Swift. UITableView is very important part of iOS ecosystem. So we split tableviews in sections. Then its easier to find right information.  1. First let’s create a project as usual. Create a new single view application X code project. Set project name to UIViewController.  2. Go to main storyboard & select view controller & use UITableView 3. Select tableview & make it initial view controller  4 Create a custom Sections Class like Name => TableSections, create register cell static return “ getCellNibs ” method. Then create  4 section enum “TableItems” then after append all sections to an array model. import UIKit struct CellNib {      static func getCellNibs () -> [ String ] {          return [ "Cell1" , "Cell2" , "Cell3" , "Cell4" ]     } } enum TableItems : Int {      case TableSections1      case TableSections2      case TableSections3      case TableSections4 } class TableSec