2015-05-05 9 views
6

C'è un modo per trasformare una stringa in un blocco di codice? Sto facendo una richiesta Ajax a un mio sito Web che ha un endpoint che restituisce del codice veloce come una stringa. Posso recuperare quel codice come una stringa, ma non posso eseguire quel codice perché non sa che è un codice.Posso trasformare una stringa in un blocco di codice in swift?

+3

Non è un programmatore Swift ma sembra una cattiva idea per molte ragioni: 1- Se il canale è compromesso, un utente malintenzionato può rendere banale l'esecuzione arbitraria della propria applicazione. 2- Se si tratta di un'app di App Store, Apple la rifiuterà poiché non consente il download del codice eseguibile. 3- Dovresti avere la tua app per compilare il codice che potrebbe essere lento/impossibile a seconda del dispositivo. In definitiva, dovresti inserire quel codice nella tua app e chiedere al tuo server di inviarti un messaggio che indichi all'app quale codice eseguire. –

risposta

10

No, non puoi farlo. Swift è un linguaggio compilato, non interpretato come Ajax.

Il compilatore Swift viene eseguito sul tuo Mac, non sul dispositivo iOS. (Lo stesso vale per l'obiettivo-C).

Inoltre, le linee guida di App Store di Apple vietano la consegna di codice eseguibile alle tue app, quindi anche se hai trovato un modo per farlo, la tua app verrebbe respinta.

10

Come altri hanno sottolineato, se si sta creando un'app iOS (soprattutto per la distribuzione nell'app store), non è possibile farlo. Tuttavia, se si sta scrivendo codice Swift per una macchina OS X E si sa che XCode è installato sulla macchina, è possibile eseguire la stringa di codice Swift eseguendo il compilatore Swift della riga di comando. Qualcosa di simile (con una corretta verifica degli errori, naturalmente):

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 

Ancora una volta, questo è probabilmente non è raccomandato in quasi tutti i casi del mondo reale, ma è un modo è possibile eseguire una stringa di codice Swift, se davvero bisogno di

Problemi correlati