Вы можете добавить «переменный параметр» к вашей функции Swift,
и добавьте аргументы к process.arguments
:
func syncShellExec(path: String, args: String...) {
let process = Process()
process.launchPath = "/bin/bash"
process.arguments = [path] + args
// ...
}
Теперь вы можете позвонить, например:
let scriptPath = Bundle.main.path(forResource: "initial", ofType: "command")!
syncShellExec(path: scriptPath)
syncShellExec(path: scriptPath, args: "Do_My_Function")
syncShellExec(path: scriptPath, args: "arg1", "arg2")
Примечание: Функция syncShellExec()
ожидает путь к сценарию,
поэтому я бы не стал делать этот параметр необязательным и принудительно разворачивать
это внутри функции. С другой стороны, Bundle.main.path(...)
вернет ноль, только если ресурс отсутствует. Это
ошибка программирования , поэтому принудительное развертывание возвращаемого значения
оправданный.
Если количество аргументов определяется только во время выполнения, то
Вы можете определить аргументы как массив
func syncShellExec(path: String, args: [String] = [])
и назовите его
syncShellExec(path: scriptPath)
syncShellExec(path: scriptPath, args: ["Do_My_Function"])
syncShellExec(path: scriptPath, args: ["arg1", "arg2"])