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

Isa*_*man 6 ios swift

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

Jef*_*Hay 13

正如其他人所指出的,如果您正在创建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
Run Code Online (Sandbox Code Playgroud)

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


Dun*_*n C 10

不,你做不到.Swift是一种编译语言,不像Ajax那样解释.

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

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

编辑:

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

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