2015-05-05 2 views
6

Есть ли способ превратить строку в блок кода? Я делаю запрос Ajax на мой сайт, у которого есть конечная точка, которая возвращает некоторый быстрый код в виде строки. Я могу вернуть этот код в виде строки, но я не могу запустить этот код, потому что он не знает, что это код.Могу ли я превратить строку в блок кода в swift?

+3

Не быстрый программист, но это звучит как плохая идея по многим причинам: 1- Если канал взломан, злоумышленник может заставить ваше приложение выполнить произвольный код тривиально. 2- Если это приложение в App Store, Apple отклонит его, поскольку они запрещают загрузку исполняемого кода. 3. Вам нужно будет скомпилировать код, который может быть медленным/невозможным в зависимости от устройства. В конечном счете, вы должны поместить этот код в свое приложение и отправить сервер вашему сообществу сообщение о том, какой код запускать. –

ответ

10

Нет, вы не можете этого сделать. Swift - это скомпилированный язык, который не интерпретируется как Ajax.

Компилятор Swift работает на вашем Mac, а не на устройстве iOS. (То же самое верно для Objective-C).

Плюс, правила магазина приложений Apple запрещают доставку исполняемого кода в ваши приложения, поэтому, даже если вы выяснили, как это сделать, ваше приложение будет отклонено.

10

Как указывали другие, если вы создаете приложение iOS (особенно для распространения в магазине приложений), вы не можете этого сделать. Однако, если вы пишете код Swift для машины OS X И вы знаете, что 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 коды, если вы действительно нужно.

Смежные вопросы