这里我提出了另一个noob问题:我试图在Swift中编写一个非常简单的程序,并且在尝试使用变量从程序中运行shell命令时遇到困难。
一个简单的例子:写system("say hello")
有效。
但是以下代码不起作用:
var whatToSay = "hello world"
system("say \(whatToSay)")
构建程序时遇到的错误是:Could not find member 'convertFromStringInterpolatingSegment'
任何帮助?
答案 0 :(得分:5)
您需要强制转换才能获得CString
:
var whatToSay = "hello world"
var nsCommand : NSString = "say \(whatToSay)"
var command : CString? = nsCommand.cStringUsingEncoding(NSUTF8StringEncoding)
system(command!)
修改强>
如果您经常使用它,则可以使用String
的扩展程序:
extension String {
func toCString() -> CString? {
let nsSelf : NSString = self
return nsSelf.cStringUsingEncoding(NSUTF8StringEncoding)
}
}
var whatToSay = "hello world"
system("say \(whatToSay)".toCString()!)
答案 1 :(得分:1)
在Swift 2.1(Xcode 7.1)中,如果你需要在OS X中运行像say
这样的命令,你也可以使用NSTask,如this blog post
基本上,有些东西(如果你不需要检查命令输出,那就是):
import Foundation
let task = NSTask()
task.launchPath = "/usr/bin/say"
task.arguments = ["Hello", "World!"]
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()