The command sample could be useful if you would like to supply a standard interface for various actions that will likely be executed later in time. Normally it is 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 examine 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
Obtainable instructions:
👉 assist This command
👉 ls Checklist paperwork
Bye! 👋
""")
}
}
class ListCommand: Command {
func execute() {
Checklist().homeDirectoryContents()
}
}
class Checklist {
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()
If you happen to 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:
- numerous button actions
- assortment / desk view choice actions
- navigating between controllers
- historical past administration / undo supervisor
- transactional habits
- progress administration
- wizards
As you’ll be able to see this sample could be utilized in a number of areas. Apple even made a particular class for this function referred to as NSInvocation, however sadly it isn’t obtainable in Swift, on account of it is dynamic habits. That is not a giant deal, you’ll be able to at all times make your individual protocol & implementation, generally you simply want one additional class that wraps the underlying command logic. 😛
