The command sample may be helpful if you would like to offer a typical interface for various actions that might be executed later in time. Often it is an object that encapsulates all the data wanted to run the underlying motion correctly.
Instructions are sometimes used to deal with consumer interface actions, create undo managers, or handle transactions. Let’s have a look at 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()
Should you save this file, can run it by merely typing ./file-name.swift
from a terminal window. The Swift compiler will handle the remaining.
Actual world use circumstances for the command design sample:
- numerous button actions
- assortment / desk view choice actions
- navigating between controllers
- historical past administration / undo supervisor
- transactional habits
- progress administration
- wizards
As you possibly can see this sample may be utilized in a number of areas. Apple even made a particular class for this function known as NSInvocation, however sadly it isn’t obtainable in Swift, as a consequence of it is dynamic habits. That is not a giant deal, you possibly can at all times make your individual protocol & implementation, typically you simply want one further class that wraps the underlying command logic. 😛