Обновился с Kanna 2.2.1 до 4.0.2 и получил ту же ошибку - PullRequest
0 голосов
/ 01 ноября 2018

Я переписываю проект, который нашел на Github, чтобы узнать и научиться использовать файлы swift и pod. Я обновил Kanna с 2.2.1 до 4.0.2, потому что получал ошибку arm64.

С 4.0.2 я получаю ошибку:

Инициализатор для условного связывания должен иметь необязательный тип, а не «HTMLDocument»

Вызов может скинуть, но он не помечен как 'try' и ошибка не обработана

Я не уверен, что означает эта ошибка и как ее исправить. Это связано с оператором if:

if let doc = Kanna.HTML(html: htmlText, encoding: String.Encoding.utf8) {
    for itemSize in doc.css("option[value^='']") {
        let itemSizeText = itemSize.text!.lowercased()

        let wishListItemSize = self.websiteInstance!.websiteWishListItem.size!.lowercased()

        if itemSizeText.range(of: wishListItemSize) != nil {
            print("Found size")

            foundItemSize = true

            let itemSizeValue = itemSize["value"]

            self.websiteInstance!.viewController!.websiteBrowser!.evaluateJavaScript("document.getElementById(\"size-options\").value = \(itemSizeValue!)", completionHandler: nil)

            break
        }

        countSize += 1
    }                    
}

1 Ответ

0 голосов
/ 01 ноября 2018

Подпись типа для метода, который вы вызываете, public func HTML(html: String, url: String? = nil, encoding: String.Encoding, option: ParseOption = kDefaultHtmlParseOption) throws -> HTMLDocument. Функция возвращает не необязательное значение, но может выдать ошибку.

Вы можете обработать ошибку, используя ключевое слово try?, чтобы функция возвращала nil в случае возникновения ошибки и использования дополнительной привязки, которую вы используете в данный момент, следующим образом:

if let doc = try? Kanna.HTML(html: htmlText, encoding: String.Encoding.utf8) {...

или, вернее, используйте try и поместите вызов функции в блок do-catch, чтобы увидеть фактическую ошибку в случае возникновения какой-либо ошибки.

do {
    let doc = Kanna.HTML(html: htmlText, encoding: String.Encoding.utf8)
    for itemSize in doc.css("option[value^='']") {
        let itemSizeText = itemSize.text!.lowercased()

        let wishListItemSize = self.websiteInstance!.websiteWishListItem.size!.lowercased()

        if itemSizeText.range(of: wishListItemSize) != nil {
            print("Found size")
            foundItemSize = true
            let itemSizeValue = itemSize["value"]    
            self.websiteInstance!.viewController!.websiteBrowser!.evaluateJavaScript("document.getElementById(\"size-options\").value = \(itemSizeValue!)", completionHandler: nil)
            break
        }

        countSize += 1
    }        
} catch {
    print(error)
    // Handle error
}
...