18.4 C
New York
Monday, March 10, 2025

Swift command design sample – The.Swift.Dev.



· 1 min learn


This time I’ll present you a behavioral sample. Here’s a little instance of the command design patten written in Swift.

The command sample will be useful should you’d like to supply a typical interface for various actions that will probably be executed later in time. Normally it’s an object that encapsulates all the knowledge wanted to run the underlying motion correctly.

Instructions are sometimes used to deal with person interface actions, create undo managers, or handle transactions. Let’s see a command sample implementation in Swift by making a command line argument handler with emojis. 💾

#!/usr/bin/env swift

import Basis

protocol Command {
    func execute()
}

class HelpCommand: Command {

    func execute() {
        Assist().data()
    }
}

class Assist {

    func data() {
        print("""

             🤖 Commander 🤖
                  v1.0

        Accessible instructions:

            👉 assist      This command
            👉 ls        Record paperwork

        Bye! 👋

        """)
    }
}

class ListCommand: Command {

    func execute() {
        Record().homeDirectoryContents()
    }
}

class Record {

    func homeDirectoryContents() {
        let fileManager = FileManager.default
        guard let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
            print("Couldn't open paperwork listing")
            exit(-1)
        }
        do {
            let fileURLs = strive fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
            print("nt📁 Itemizing paperwork listing:n")
            print(fileURLs.map { "tt💾 " + $0.lastPathComponent }.joined(separator: "nn") + "n" )
        }
        catch {
            print(error.localizedDescription)
            exit(-1)
        }

    }
}

class App {

    var instructions: [String:Command] = [:]

    init() {
        self.instructions["help"] = HelpCommand()
        self.instructions["ls"] = ListCommand()
    }

    func run() {
        let arguments = CommandLine.arguments[1...]

        guard let key = arguments.first, self.instructions[key] != nil else "))]")
            exit(-1)
        

        self.instructions[key]!.execute()
    }
}

App().run()

For those who save this file, can run it by merely typing ./file-name.swift from a terminal window. The Swift compiler will deal with the remainder.

Actual world use instances for the command design sample:

+ varied button actions
+ assortment / desk view choice actions
+ navigating between controllers
+ historical past administration / undo supervisor
+ transactional conduct
+ progress administration
+ wizards

As you may see this sample will be utilized in a number of areas. Apple even made a selected class for this function referred to as NSInvocation, however sadly it’s not obtainable in Swift, on account of it’s dynamic conduct. That’s not an enormous deal, you may all the time make your personal protocol & implementation, generally you simply want one additional class that wraps the underlying command logic. 😛

Associated posts


On this article I’m going to indicate you learn how to implement a primary occasion processing system on your modular Swift utility.


Be taught the iterator design sample through the use of some customized sequences, conforming to the IteratorProtocol from the Swift commonplace library.


Discover ways to use lazy properties in Swift to enhance efficiency, keep away from optionals or simply to make the init course of extra clear.


Newbie’s information about optics in Swift. Discover ways to use lenses and prisms to govern objects utilizing a purposeful strategy.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles