导入动态创建的Swift类

时间:2016-08-12 11:26:41

标签: ios swift swift3

我正在尝试一段代码,我需要一些帮助。我正在创建一个文件,它是一个包含类和变量的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();

2 个答案:

答案 0 :(得分:1)

您无法在运行时添加代码。编译代码时,没有剩余的* .swift文件,可供人类阅读。编译完成后,您的代码基本上只有01

答案 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"