swift - 快速从函数返回值
问题描述
我有一个函数,它是一些 WebScraping 代码的一部分。函数中相当“深”我有一个值,我想在图表中显示。为此,我需要从函数 parseElevation() 中获取变量“elevation”。我努力了
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
}
}
}
有人知道如何解决这个问题。我一直遇到快速返回值的问题。
解决方案
你不能从没有返回值的闭包中返回一些东西。
您需要一个异步完成处理程序
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
语句都默默地离开了闭包。
推荐阅读
- java - java中Math.floorMod()和%的区别
- javascript - 单击图标显示 div,然后再次单击隐藏 div
- r - 如何在 R 中向维恩图添加额外的文本?
- javascript - 未捕获的 ReferenceError:在 HTMLFormElement.onsubmit 中未定义 emailjs
- r - 迭代地减去数据框中的向量
- c++ - 可以使用 boost::asio::thread_pool 来代替 boost::asio::io_context 与 boost::thread::thread_group 的组合吗?
- javascript - 将数字值转换为美元格式,以正确的可见格式显示
- java - 数组的模式——Java中的方法
- python - Python 在 '%x.xf' % 格式中使用字符串
- c++ - 使用 std::vector 在类中分配索引