我有一个变量,当您进行设置和变异时,我希望有一个侦听器,并且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。有什么想法为什么一个突变在做,而另一个却没有?
答案 0 :(得分:0)
问题在于后卫的返回应该是继续的,否则,由于它也是基于oldValue的,它将在第一个元组之后终止执行。