Swift 我能';不要在函数中使用进程
我有一个问题,我想使用函数Swift 我能';不要在函数中使用进程,swift,process,Swift,Process,我有一个问题,我想使用函数Process(),但是当我在函数中调用它时,我得到了 使用未解析的标识符“进程” 但当我在代码中直接调用它时,它就工作了。 有人知道原因吗?由于您既没有提到要针对哪个平台,也没有提供任何类型的代码,因此您需要注意以下事项: 在Swift 3.0中,Process()被重命名为CommandLine() 如果您的目标是iOS,CommandLine()不可用,因此您需要执行以下操作: 在iOS上使用NSTask(): 实现这一点的最佳方法,或者至少是我最喜欢的方法(我也
Process()
,但是当我在函数中调用它时,我得到了
使用未解析的标识符“进程”
但当我在代码中直接调用它时,它就工作了。
有人知道原因吗?由于您既没有提到要针对哪个平台,也没有提供任何类型的代码,因此您需要注意以下事项:
Process()
被重命名为CommandLine()
CommandLine()
不可用,因此您需要执行以下操作:NSTask()
及其所需的一切的方法
然后,为了在Swift中使用此代码,您需要创建一个,在其中您需要导入NSTask.h
,以便它暴露于Swift并能够在Swift代码中使用它
完成此操作后,只要在代码中使用以下函数即可运行任务:
func task(launchPath: String, arguments: String...) -> NSString {
let task = NSTask.init()
task?.setLaunchPath(launchPath)
task?.arguments = arguments
// Create a Pipe and make the task
// put all the output there
let pipe = Pipe()
task?.standardOutput = pipe
// Launch the task
task?.launch()
task?.waitUntilExit()
// Get the data
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
return output!
}
这样称呼它:
task(launchPath: "/usr/bin/echo", arguments: "Hello World")
这也将返回值,因此您甚至可以通过执行以下操作来显示该值:
print(task(launchPath: "/usr/bin/echo", arguments: "Hello, World!"))
将打印:
~> Hello, World!
要使其正常工作且不引发nsinternalinconsistenceexception
,您需要将启动路径设置为可执行文件的完整路径,而不是仅设置为包含它的目录
您还需要设置所有由逗号分隔的命令参数
在iPad Mini 2(iOS 12.1~>越狱)和iPhone Xr(iOS 12.2~>非越狱)上测试
注意:尽管这在非越狱和越狱设备上都有效,但您的应用程序将在AppStore上被拒绝,如下所述:
您正在使用私有API,因此它将在应用商店中被拒绝。另外,Xcode 11有一些新功能,在使用某些专用API时会触发构建失败。
我只建议在不会上传到应用商店的应用程序中使用此选项,否则,尝试在不使用命令的情况下实现您想要的,肯定会有其他方法来实现
如果您的应用程序针对越狱iOS设备,并将上载到Cydia、Zebra、Thunderbolt或Sileo等第三方商店,那么这将正常工作。由于您既没有提到您的目标平台,也没有提供任何类型的代码,您需要注意以下事项:
Process()
被重命名为CommandLine()
CommandLine()
不可用,因此您需要执行以下操作:NSTask()
及其所需的一切的方法
然后,为了在Swift中使用此代码,您需要创建一个,在其中您需要导入NSTask.h
,以便它暴露于Swift并能够在Swift代码中使用它
完成此操作后,只要在代码中使用以下函数即可运行任务:
func task(launchPath: String, arguments: String...) -> NSString {
let task = NSTask.init()
task?.setLaunchPath(launchPath)
task?.arguments = arguments
// Create a Pipe and make the task
// put all the output there
let pipe = Pipe()
task?.standardOutput = pipe
// Launch the task
task?.launch()
task?.waitUntilExit()
// Get the data
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
return output!
}
这样称呼它:
task(launchPath: "/usr/bin/echo", arguments: "Hello World")
这也将返回值,因此您甚至可以通过执行以下操作来显示该值:
print(task(launchPath: "/usr/bin/echo", arguments: "Hello, World!"))
将打印:
~> Hello, World!
要使其正常工作且不引发nsinternalinconsistenceexception
,您需要将启动路径设置为可执行文件的完整路径,而不是仅设置为包含它的目录
您还需要设置所有由逗号分隔的命令参数
在iPad Mini 2(iOS 12.1~>越狱)和iPhone Xr(iOS 12.2~>非越狱)上测试
注意:尽管这在非越狱和越狱设备上都有效,但您的应用程序将在AppStore上被拒绝,如下所述:
您正在使用私有API,因此它将在应用商店中被拒绝。另外,Xcode 11有一些新功能,在使用某些专用API时会触发构建失败。
我只建议在不会上传到应用商店的应用程序中使用此选项,否则,尝试在不使用命令的情况下实现您想要的,肯定会有其他方法来实现
如果您的应用程序针对越狱iOS设备,并将上载到Cydia、Zebra、Thunderbolt或Sileo等第三方商店,则这将正常工作。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。最小、完整、可验证的示例适用于此处。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。请提供您的代码欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。最小、完整、可验证的示例适用于此处。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。请提供您的代码