Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
swift中函数的返回值_Swift_Function_Cocoa_Return - Fatal编程技术网

swift中函数的返回值

swift中函数的返回值,swift,function,cocoa,return,Swift,Function,Cocoa,Return,我有一个函数,它是一些网络垃圾代码的一部分。在函数中,我有一个值,我想在图表中显示它。为此,我需要从函数parseElevation()中获取变量“elevation”。我试过了 func parseElevation() -> String { 但是,这不起作用,因为变量“高程”是“更深一层” 代码如下: func parseElevation() { webView.evaluateJavaScript("document.body.innerHTML&q

我有一个函数,它是一些网络垃圾代码的一部分。在函数中,我有一个值,我想在图表中显示它。为此,我需要从函数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(){
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“如果您认为有用,请不要忽略接受答案并向上投票”