Tuesday, June 25, 2024
HomeIOS DevelopmentSwift adapter design sample - The.Swift.Dev.

Swift adapter design sample – The.Swift.Dev.


Fist of all let me emphasize that, that is the true world illustration of what we’ll construct on this little Swift adapter sample tutorial:

Adapter is a structural design sample that permits objects with incompatible interfaces to work collectively. In different phrases, it transforms the interface of an object to adapt it to a special object.

So adapter can remodel one factor into one other, generally it is known as wrapper, as a result of it wraps the thing and gives a brand new interface round it. It is like a software program dongle for particular interfaces or legacy lessons. (Dongle haters: it is time to go away the previous behind!) 😂

Adapter design sample implementation

Creating an adapter in Swift is definitely an excellent straightforward process to do. You simply have to make a brand new object, “field” the previous one into it and implement the required interface in your new class or struct. In different phrases, a wrapper object might be our adapter to implement the goal interface by wrapping an different adaptee object. So once more:

Adaptee

The article we’re adapting to a particular goal (e.g. old-school USB-A port).

Adapter

An object that wraps the unique one and produces the brand new necessities specified by some goal interface (this does the precise work, aka. the little dongle above).

Goal

It’s the object we wish to use adaptee with (our USB-C socket).

How you can use the adapter sample in Swift?

You should utilize an adapter if you wish to combine a third-party library in your code, but it surely’s interface would not match along with your necessities. For instance you possibly can create a wrapper round a whole SDK or backend API endpoints as a way to create a standard denominator. 👽

In my instance, I’ll wrap an EKEvent object with an adapter class to implement a model new protocol. 📆

import Basis
import EventKit


protocol Occasion {
    var title: String { get }
    var startDate: String { get }
    var endDate: String { get }
}


class EventAdapter {

    non-public lazy var dateFormatter: DateFormatter = {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy. MM. dd. HH:mm"
        return dateFormatter
    }()

    non-public var occasion: EKEvent

    init(occasion: EKEvent) {
        self.occasion = occasion
    }
}


extension EventAdapter: Occasion {

    var title: String {
        return self.occasion.title
    }
    var startDate: String {
        return self.dateFormatter.string(from: occasion.startDate)
    }
    var endDate: String {
        return self.dateFormatter.string(from: occasion.endDate)
    }
}


let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"

let calendarEvent = EKEvent(eventStore: EKEventStore())
calendarEvent.title = "Adapter tutorial deadline"
calendarEvent.startDate = dateFormatter.date(from: "07/30/2018 10:00")
calendarEvent.endDate = dateFormatter.date(from: "07/30/2018 11:00")


let adapter = EventAdapter(occasion: calendarEvent)

One other use case is when it’s important to use a number of present remaining lessons or structs however they lack some performance and also you wish to construct a brand new goal interface on high of them. Typically it is a sensible choice to implement an wrapper to deal with this messy scenario. 🤷‍♂️

That is all in regards to the adapter design sample. Often it is very easy to implement it in Swift – or in another programming language – but it surely’s tremendous helpful and generally unavoidable.

Youngsters, bear in mind: do not go too exhausting on dongles! 😉 #himym

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments