Swift 将许多具有相互依赖关系的javascript文件加载到JavaScriptCore上下文中

Swift 将许多具有相互依赖关系的javascript文件加载到JavaScriptCore上下文中,swift,javascriptcore,Swift,Javascriptcore,下面的问答说明了如何将单个javascript文件加载到JavaScriptCore: 如果有很多javascript文件并且它们之间有相互依赖关系,该怎么办:它们是否可以按与依赖关系相反的顺序加载并期望正确解析 utils.js file1NeedingUtils.js file2NeedingFile1.js 那么: func analyzeText(jsContext: JSContext, scriptName: String) { var ext = scriptName.pa

下面的问答说明了如何将单个
javascript
文件加载到
JavaScriptCore

如果有很多javascript文件并且它们之间有相互依赖关系,该怎么办:它们是否可以按与依赖关系相反的顺序加载并期望正确解析

  • utils.js
  • file1NeedingUtils.js
  • file2NeedingFile1.js
  • 那么:

    func analyzeText(jsContext: JSContext, scriptName: String) {
        var ext = scriptName.pathExtension
        var fileName = scriptName.substringToIndex(
            advance(scriptName.startIndex, 
                    scriptName.utf16Count - ext.utf16Count - 1))
    
        if fileExtension.utf16Count == 0 {
            fileName = scriptName
            ext = "js"
        }
    
        let url = NSBundle.mainBundle()
            .URLForResource(fileName, withExtension: ext)
        let scriptCode = String(contentsOfURL: url!, 
                                encoding: NSUTF8StringEncoding, 
                                error: nil)!
    
        jsContext.evaluateScript(scriptCode)
    }
    var jsCtx = JSContext(virtualMachine: JSVirtualMachine())
    
    
    ["utils.js","file1NeedingUtils.js","file2NeedingFile1.js"]
          .forEach( x in analyzeScript(jsCtx, x))
    
    请注意,我们在所有调用中共享相同的JSContext

    该功能通常是浏览器要处理的领域。我计划走这条路线,但我想知道是否可能会有问题。此外,是否对流程进行了有帮助的优化

    func analyzeText(jsContext: JSContext, scriptName: String) {
        var ext = scriptName.pathExtension
        var fileName = scriptName.substringToIndex(
            advance(scriptName.startIndex, 
                    scriptName.utf16Count - ext.utf16Count - 1))
    
        if fileExtension.utf16Count == 0 {
            fileName = scriptName
            ext = "js"
        }
    
        let url = NSBundle.mainBundle()
            .URLForResource(fileName, withExtension: ext)
        let scriptCode = String(contentsOfURL: url!, 
                                encoding: NSUTF8StringEncoding, 
                                error: nil)!
    
        jsContext.evaluateScript(scriptCode)
    }
    var jsCtx = JSContext(virtualMachine: JSVirtualMachine())
    
    
    ["utils.js","file1NeedingUtils.js","file2NeedingFile1.js"]
          .forEach( x in analyzeScript(jsCtx, x))