我正在尝试一段代码,我需要一些帮助。我正在创建一个文件,它是一个包含类和变量的swift文件。我能够成功创建和读取文件。现在,我可以使用这个swift文件并访问它的变量(在本例中为v)吗?
$html = "<YOU_HTML_STRING_HERE>";
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD); // Load the HTML string and init DOM
$xpath = new DOMXPath($dom); // Init XPATH
// you need to register the namespace "php" to make it available in the query
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPhpFunctions();
// add delimiter to your pattern
$regex = '/^{[^}]+}$/';
// search your node anywhere in the DOM tree with "//"
$items = $xpath->query("//*[php:functionString('preg_match', '$regex', text())>0]");
foreach ($items as $tag) {
$tag->parentNode->removeChild($tag);
}
echo $dom->saveHTML();
答案 0 :(得分:1)
您无法在运行时添加代码。编译代码时,没有剩余的* .swift文件,可供人类阅读。编译完成后,您的代码基本上只有0
和1
。
答案 1 :(得分:0)
正如FelixSFD在他们的回答中所说,你无法动态构建Swift文件并在运行时在设备上进行编译,至少在正常的沙盒环境中是这样。如果你有一个越狱设备,你可以构建和安装Swift开源运行时,并以这种方式即时编译程序。
作为替代方案,您可以查看JavaScriptCore框架以构建和运行动态JavaScript代码,并将其桥接到您的应用程序中。
以下是将对象传递给JavaScript并使用类映射返回相同对象的快速示例:
import JavaScriptCore
let js = "function test(input) { return input }"
class TestClass: NSObject {
var name: String
init(name: String) {
self.name = name
}
}
let context = JSContext()
context.evaluateScript(js)
let testFunc = context.objectForKeyedSubscript("test")
let result = testFunc.callWithArguments([TestClass(name: "test")])
result.toDictionary()
let testObj = result.toObjectOfClass(TestClass.self) as? TestClass
testObj?.name // "test"