我试图获取一个通过HTTP请求调用API并返回字符串的函数。我的请求函数有一个返回数据的完成处理程序,它被我的函数使用。

func buildHTML () -> String {
    var htmlString: String = ""

    request(url: "https://someurl.com/api/getalldata") { (jsonData: Data) in
        let units = try JSONDecoder().decode([MyUnits].self, from: jsonData)
            for unit in units {
                //Building my html string here
                htmlString += "......."
            }
    }
    return htmlString
}

但是,这不起作用,因为htmlstring作为空字符串返回,如何让这个字符串由buildHTML返回?
欢迎有任何想法!

最佳答案

由于您的请求是异步的,所以您将无法返回结果,因为您的返回语句将在执行闭包之前执行。在这种情况下,解决方案是在外部函数中也使用完成处理程序:

func buildHTML(_ completion: @escaping (String)->Void) {
    var htmlString: String = ""

    request(url: "https://someurl.com/api/getalldata") { (jsonData: Data) in
        let units = try JSONDecoder().decode([MyUnits].self, from: jsonData)
            for unit in units {
                //Building my html string here
                htmlString += "......."
            }
        completion(htmlString)
    }
}

关于swift - 如何从完成处理程序中获取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48672180/

10-10 21:17