Разве не вызывать каждую мутацию? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть переменная, для которой я хочу иметь слушателя, когда вы устанавливаете и изменяете его, и didSet кажется идеальным кандидатом.Тем не менее, в моем первоначальном тестировании, первое добавление запускает набор заданий и (в моем примере) JS загружается в мое веб-представление, однако я никогда не вижу, чтобы второе добавление достигло точки останова на 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 голосов
/ 10 февраля 2019

Проблема заключалась в том, что возвращение в Guard должно быть продолжением, в противном случае, поскольку оно также основано на oldValue, оно завершит выполнение после первого кортежа.

...