首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回值

函数返回值
EN

Stack Overflow用户
提问于 2021-01-03 09:58:03
回答 1查看 184关注 0票数 0

我有一个函数,它是WebScraping代码的一部分。在函数中,我有一个想要在图表中显示的值。要做到这一点,我需要从函数parseElevation()中获取变量“海拔”。我试过了

代码语言:javascript
复制
func parseElevation() -> String {

但是,这不起作用,因为变量“海拔”是“一层更深”。

这是代码:

代码语言:javascript
复制
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
                
            }
        }
        
    }

有人知道如何解决这个问题吗。我一直以来都有一个问题,返回价值观的迅速。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 10:12:27

不能从没有返回值的闭包中返回某些内容。

您需要异步完成处理程序。

代码语言:javascript
复制
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)                
        }
    } 
}

然后叫它

代码语言:javascript
复制
parseElevation { elevation in
    print(elevation)
}

备注:

第二个片段中的

  • elevation仅在闭包{}.

中可用。

  • 认为,只有在计算结果时才调用完成处理程序。所有return语句都安静地离开闭包.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65548521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档