我可以在swift中将字符串转换为代码块吗?

时间:2015-05-05 16:47:39

标签: ios swift

有没有办法将字符串转换为代码块?我向我的网站发出Ajax请求,该网站的端点返回一些快速代码作为字符串。我可以将该代码作为字符串返回,但我无法运行该代码,因为它不知道它是代码。

2 个答案:

答案 0 :(得分:12)

正如其他人所指出的,如果您正在创建iOS应用程序(尤其是在应用程序商店中进行分发),则无法执行此操作。但是,如果您正在为OS X机器编写Swift代码并且您知道XCode已安装在机器上,则可以通过运行命令行Swift编译器来运行Swift代码字符串。这样的事情(当然有适当的错误检查):

var str = "let str = \"Hello\"\nprintln(\"\\(str) world\")\n"    

let task = Process()

task.launchPath = "/usr/bin/swift"

let outpipe = Pipe()
let inpipe = Pipe()
inpipe.fileHandleForWriting.write(str.data(using: String.Encoding.utf8, allowLossyConversion: true)!)
task.standardInput = inpipe
task.standardOutput = outpipe
task.launch()
task.waitUntilExit()
task.standardInput = Pipe()

let data = outpipe.fileHandleForReading.readDataToEndOfFile()

let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String

同样,在几乎所有真实案例中都不建议这样做,但如果你真的需要,可以执行一串Swift代码。

答案 1 :(得分:11)

不,你不能这样做。 Swift是一种编译语言,不像Ajax那样解释。

Swift编译器在Mac上运行,而不是在iOS设备上运行。 (Objective-C也是如此)。

另外,Apple的应用程序商店指南禁止向您的应用程序提供可执行代码,因此即使您想出办法,您的应用也会被拒绝。

编辑:

请注意,随着Swift游乐场的出现,可以在iPad上运行Swift编译器。最近的高端iPhone可能还可以胜任,但你必须弄清楚如何安装它。

如上所述,Apple的应用商店指南禁止您在运行时向您的应用提供代码。