didSet不会在每个突变中都被调用吗?

时间:2019-02-09 03:14:59

标签: arrays swift didset

我有一个变量,当您进行设置和变异时,我希望有一个侦听器,并且didSet似乎是理想的候选者。但是,在我的初次测试中,第一个追加触发了did集合,并且(在我的示例中)JS加载到了我的webview中,但是我再也看不到第二个追加在didSet上遇到了断点,并且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。有什么想法为什么一个突变在做,而另一个却没有?

1 个答案:

答案 0 :(得分:0)

问题在于后卫的返回应该是继续的,否则,由于它也是基于oldValue的,它将在第一个元组之后终止执行。