swift中函数的返回值
我有一个函数,它是一些网络垃圾代码的一部分。在函数中,我有一个值,我想在图表中显示它。为此,我需要从函数parseElevation()中获取变量“elevation”。我试过了swift中函数的返回值,swift,function,cocoa,return,Swift,Function,Cocoa,Return,我有一个函数,它是一些网络垃圾代码的一部分。在函数中,我有一个值,我想在图表中显示它。为此,我需要从函数parseElevation()中获取变量“elevation”。我试过了 func parseElevation() -> String { 但是,这不起作用,因为变量“高程”是“更深一层” 代码如下: func parseElevation() { webView.evaluateJavaScript("document.body.innerHTML&q
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(){
evaluateJavaScript(“document.body.innerHTML”){result,错误在
guard let html=结果为?字符串,错误==nil else{
返回
}
让LeftSideOf值为“”
"""
让右边的值为“”
"""
guard let leftRange=html.range(of:LeftSideOf值)else{
打印(“找不到左范围”)
返回
}
guard let righRange=html.range(of:rightsideof值)else{
打印(“找不到正确的范围”)
返回
}
让RangeofValue=leftRange.upperBound..您不能从没有返回值的闭包返回某些内容
您需要一个异步完成处理程序
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)
}
}
}
注:
- 第二个代码段中的
elevation
仅在闭包{}
中可用
- 假设只有在计算结果时才会调用完成处理程序。所有
return
语句都会以静默方式离开闭包
不能从没有返回值的闭包中返回某些内容
您需要一个异步完成处理程序
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)
}
}
}
注:
- 第二个代码段中的
elevation
仅在闭包{}
中可用
- 假设只有在计算结果时才会调用完成处理程序。所有
return
语句都会以静默方式离开闭包
谢谢!我还有一个问题,我可以将“高程”的值分配给变量吗,类似于:let value1=parseElevation{laving in print(elevation)}由于异步行为,这是不可能的。请执行需要在闭包内部执行的代码。@JonasHen不要忽略“接受答案并向上投票”(如果您认为它有用),谢谢!我还有一个问题,我可以将“提升”的值赋给变量吗,类似于:let value1=parseElevation{elevation in print(elevation)}由于异步行为,这是不可能的。请在闭包内执行您需要执行的代码。@JonasHen“如果您认为有用,请不要忽略接受答案并向上投票”