Реализация наблюдателей с «\» перед перечислениями - PullRequest
0 голосов
/ 07 февраля 2019

Недавно я реализовал представление прогресса, чтобы показать процесс загрузки на веб-странице.Я прочитал пример (https://gist.github.com/fxm90/50d6c73d07c4d9755981b9bb4c5ab931) и изменен. Но часть кода мне не понятна, именно

\.estimatedProgress

Это соответствующий код.

var webView: WKWebView!
// Progress view reflecting the current loading progress of the web view.
let progressView = UIProgressView(progressViewStyle: .default)
/// The observation object for the progress of the web view (we only receive notifications until it is deallocated).
private var estimatedProgressObserver: NSKeyValueObservation?

private func setupEstimatedProgressObserver() {
    estimatedProgressObserver = webView.observe(\.estimatedProgress, options: [.new]) { [weak self] webView, _ in
        self?.progressView.progress = Float(webView.estimatedProgress)
    }
}

Вопросы

  1. Почему и когда вы можете использовать символ '\' перед перечислениями?
  2. Нет необходимости использовать deinit или удалять наблюдателя таким образом? Почему??

1 Ответ

0 голосов
/ 07 февраля 2019

Синтаксис \<Type>.<path> является выражением Swift Key-Path (а не перечислением) и, по сути, является строго типизированной ссылкой на путь некоторого Type.Когда можно определить тип, вы можете его опустить, и тогда выражение станет \.path (в вашем примере полное выражение будет \WKWebView.estimatedProgress).

В приведенной выше ссылке есть несколько примеров, которые помогут вам лучше понять это.

Во второй части наблюдение будет продолжаться только до тех пор, пока estimatedProgressObserver не будет освобождено (поэтомудо тех пор, пока что-то твердо на него ссылается).

...