我有一个函数,它是WebScraping代码的一部分。在函数中,我有一个想要在图表中显示的值。要做到这一点,我需要从函数parseElevation()中获取变量“海拔”。我试过了
func parseElevation() -> String {但是,这不起作用,因为变量“海拔”是“一层更深”。
这是代码:
func parseElevation() {
webView.evaluateJavaScript("document.body.innerHTML") { result, error in
guard let html = result as? String, error == nil else {
return
}
let leftSideOfTheValue = """
<pre style="word-wrap: break-word; white-space: pre-wrap;">
"""
let rightSideOfTheValue = """
</pre>
"""
guard let leftRange = html.range(of: leftSideOfTheValue) else {
print("cant find left range")
return
}
guard let righRange = html.range(of: rightSideOfTheValue) else {
print("cant find right range")
return
}
let rangeOfTheValue = leftRange.upperBound..<righRange.lowerBound
let elevationInfo = (html[rangeOfTheValue])
let last9 = elevationInfo.suffix(11)
if let index = (last9.range(of: ",")?.upperBound)
{
//prints "value"
let afterEqualsTo = String(last9.suffix(from: index))
print(afterEqualsTo)
let elevation = afterEqualsTo
}
}
}有人知道如何解决这个问题吗。我一直以来都有一个问题,返回价值观的迅速。
发布于 2021-01-03 10:12:27
不能从没有返回值的闭包中返回某些内容。
您需要异步完成处理程序。
func parseElevation(completion: @escaping (String) -> Void) {
webView.evaluateJavaScript("document.body.innerHTML") { result, error in
guard let html = result as? String, error == nil else {
return
}
let leftSideOfTheValue = """
<pre style="word-wrap: break-word; white-space: pre-wrap;">
"""
let rightSideOfTheValue = """
</pre>
"""
guard let leftRange = html.range(of: leftSideOfTheValue) else {
print("cant find left range")
return
}
guard let righRange = html.range(of: rightSideOfTheValue) else {
print("cant find right range")
return
}
let rangeOfTheValue = leftRange.upperBound..<righRange.lowerBound
let elevationInfo = (html[rangeOfTheValue])
let last9 = elevationInfo.suffix(11)
if let index = (last9.range(of: ",")?.upperBound)
{
//prints "value"
let afterEqualsTo = String(last9.suffix(from: index))
completion(afterEqualsTo)
}
}
}然后叫它
parseElevation { elevation in
print(elevation)
}备注:
第二个片段中的
elevation仅在闭包{}.中可用。
return语句都安静地离开闭包.https://stackoverflow.com/questions/65548521
复制相似问题