Swift脚本和命令行参数

时间:2020-02-23 14:44:04  来源:igfitidea点击:

在本教程中,我们将讨论如何在Swift中创建脚本。
是的,Swift是一种脚本语言。
我们将构建swift脚本并从命令行运行它们,同时传递参数。

Swift脚本

Apple已将Swift限制为仅用于构建应用程序或者仅在XCode上使用。
我们可以使用Swift从终端运行脚本。
我们还可以在XCode外部编写一个swift文件,并使用终端对其进行编译。

脚本只是即时解释的代码,而编译后的代码将转换为可执行的二进制文件以运行。

创建一个Swift脚本

注意:您可以使用任何编辑器编写以下代码,并以.swift扩展名保存。
我们使用XCode命令行项目只是为了在代码中使用自动完成功能。

在下一个屏幕上设置项目名称。
您已经准备好在导入语句中设置了Foundation Framework的main.swift文件。
我们将在代码中使用Cocoa Framework,因为它也包含Application Kit和Foundation Framework。
(我们的漂亮脚本与应用程序有关)。

要制作Swift脚本,我们的第一行应该是" shebang",如下所示。

#!/usr/bin/env xcrun swift

shebang语法在脚本中以#开头,用于调用我们的环境(在本例中为Swift)并使脚本在Linux操作系统上运行。

代码

以下脚本用于启动指定的应用程序。

#!/usr/bin/env xcrun swift

import Cocoa

var myWorkspace = NSWorkspace.shared
myWorkspace.launchApplication("Android Studio")

NSWorkspace.shared返回Macbook上当前工作空间的实例。
launchApplication用于启动指定的应用程序。

运行脚本

要运行脚本,我们需要首先使其可执行。
启动您的终端并在Swift文件上运行chmod + x命令。

chmod +x /path/to/your/file/main.swift

现在要运行脚本,只需从路径运行文件。

/path/to/your/file/main.swift

由于我们指定了Android Studio,因此在本例中,Android Studio的启动如下所示。

处理命令行参数

我们可以在main.swift之后传递命令。
main.swift被视为第一个参数要获取代码中的参数,我们使用以下方法

CommandLine.argc

这将返回参数count整数。
下面的命令返回输入的参数的String数组。

CommandLine.arguments //Array of Strings

CommandLine.arguments[0] //main.swift is the first argument.

从脚本启动多个应用程序

现在,让我们改进脚本,以启动多个应用程序。
根据输入的参数名称,将启动一组不同的应用程序。
在下面的swift脚本中,我们将创建两个Swift数组。
第一个将包含一组与工作相关的自定义应用程序。
第二个数组与"读取"相关。
我们会将它们存储在Swift字典中,其键分别为" work"和" read"。

我们的main.swift文件代码如下。

#!/usr/bin/env xcrun swift

import Cocoa

var count = CommandLine.argc

print("Number of arguments is \(count)")

var workMode : Array = ["Android Studio", "XCode"]
var readMode : Array = ["Google Chrome", "Notes","iBooks","A"]
var myDictionary = [String: Array<String>]()

myDictionary["work"] = workMode
myDictionary["read"] = readMode

if count > 1
{
  
let key = CommandLine.arguments[1]
  
let apps = myDictionary[key]
if apps?.count != nil{
let myWorkspace = NSWorkspace.shared
  for s in apps! {
myWorkspace.launchApplication(s)
}
}
else{
  print("Incorrect command")
  }
}
else{
 print("Missing command")
}