我知道我不是第一个问这个问题的人,但我无法解决这个问题。我正在尝试使用以下方法从 HTML 中获取一段字符串evaluateJavaScript
在带有 Swift 3 的 Xcode 中,这段文本被称为value
在完成处理程序中,所以我这样做:
var userName = String()
func takeData() {
webView.evaluateJavaScript("document.querySelectorAll('.name')[0].innerHTML") { (value, error) in
if let valueName = value as? String {
self.userName = valueName
}
print(value)
print(error)
}
}
print(" The name is : \(self.userName)")
问题是控制台只打印: The name is ()
问题是您在异步函数完成执行之前打印了该值。您有多种解决方案可以解决此问题。您可以实施takeData
要将completionHandler作为其输入参数之一,请使用GCD
使您的语句按预期顺序执行或使用第三方库,例如承诺工具包 https://github.com/mxcl/PromiseKit为您处理异步请求,因此它们的行为就像带有返回值的普通函数一样。
我将为您提供一个完成处理程序的示例:
func takeData(completionHandler: @escaping (_ userName: String?) -> Void){
webView.evaluateJavaScript("document.querySelectorAll('.name')[0].innerHTML") { (value, error) in
if let valueName = value as? String {
completionHandler(valueName)
}
print(value)
print(error)
completionHandler(nil)
}
}
您可以像这样使用completionHandler 中的值:
takeData(completionHandler: { userName in
print(userName)
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)