gpt4 book ai didi

arrays - didSet 没有在每次突变时都被调用吗?

转载 作者:行者123 更新时间:2023-11-28 07:31:10 26 4
gpt4 key购买 nike

我有一个变量,当你设置和改变时我想要一个监听器,而 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。有没有想过为什么一个突变会发生而另一个不会发生?

最佳答案

问题是 guard 中的 return 应该是一个 continue,否则因为它也是基于 oldValue,它会在第一个元组之后结束执行。

关于arrays - didSet 没有在每次突变时都被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com