Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 难道不是每一次突变都会被呼叫吗?_Arrays_Swift_Didset - Fatal编程技术网

Arrays 难道不是每一次突变都会被呼叫吗?

Arrays 难道不是每一次突变都会被呼叫吗?,arrays,swift,didset,Arrays,Swift,Didset,我有一个变量,我想在设置和变异时有一个侦听器,而didSet似乎是完美的候选者。然而,在我对它的初始测试中,第一个附加触发did集,并且(在我的示例中)JS加载到我的webview中,但是我从未看到第二个附加在did集上碰到我的断点,JS不会运行,因为它一定没有加载。会发生什么事 var additionalJSFilesToRun: [(String, WKUserScriptInjectionTime)] { didSet { for (string, time) i

我有一个变量,我想在设置和变异时有一个侦听器,而didSet似乎是完美的候选者。然而,在我对它的初始测试中,第一个附加触发did集,并且(在我的示例中)JS加载到我的webview中,但是我从未看到第二个附加在did集上碰到我的断点,JS不会运行,因为它一定没有加载。会发生什么事

var additionalJSFilesToRun: [(String, WKUserScriptInjectionTime)] {
    didSet {
        for (string, time) in additionalJSFilesToRun {
            guard !self.jsFiles.contains(string) else { return }
            guard let jsPath = Bundle.main.path(forResource: string, ofType: "js"), let jsSource = try? String(contentsOfFile: jsPath) else { return }
            let script = WKUserScript(source: jsSource, injectionTime: time, forMainFrameOnly: false)
            self.webView.configuration.userContentController.addUserScript(script)
            jsFiles.insert(string)
        }
    }
}
在另一类中:

webView.additionalJSFilesToRun.append(("ABC", .atDocumentStart))
webView.additionalJSFilesToRun.append(("DEF", .atDocumentStart))

只有ABC触发didSet。有没有想过为什么一个变异在执行,而另一个变异没有执行?

问题是保护中的返回应该是一个continue,否则由于它也是基于oldValue的,它将在第一个元组之后结束执行。

问题是保护中的返回应该是continue,否则,因为它也是基于oldValue的,它将在第一个元组之后结束执行。

是否将print()添加到日志中?计数呢?做了一次打印,确实被称为正确的次数。问题是警卫声明中的返回。它应该是一个continue,否则每次只会执行第一个。愚蠢的错误。现在要关闭此…您是否已将print()添加到日志中?计数呢?做了一次打印,确实被称为正确的次数。问题是警卫声明中的返回。它应该是一个continue,否则每次只会执行第一个。愚蠢的错误。现在关闭这个。。。