我正在重写一个在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
}
}
答案 0 :(得分:1)
您要调用的方法的类型签名为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
}