Ios 如何在func中使用转义闭包返回一些数据?

Ios 如何在func中使用转义闭包返回一些数据?,ios,swift,closures,swift5,Ios,Swift,Closures,Swift5,在我的代码中,我希望在网络请求后返回一些数据 func funcName()->String{ var data = "demo" DataLoader.fetch { result in if case .success(let fetchedData) = result { data = fetchedData } else {

在我的代码中,我希望在网络请求后返回一些数据

    func funcName()->String{
        var data = "demo"
        DataLoader.fetch { result in
            if case .success(let fetchedData) = result {
                data = fetchedData
            } else {
                data = "Fail"
            }
        }
        return data
    }
DataLoader用于从API获取一些数据,代码如下:

struct DataLoader {
    static func fetch(completion: @escaping (Result<String, Error>) -> Void) {
        let url = URL(string: "URL LINK")!
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            guard error == nil else {
                completion(.failure(error!))
                return
            }
            completion(.success(data!))
        }
        task.resume()
    }
}
结构数据加载器{ 静态函数获取(完成:@escaping(Result)->Void){ 让url=url(字符串:“url链接”)! 让task=URLSession.shared.dataTask(带:url){(数据、响应、错误)在 保护错误==nil else{ 完成(.failure(error!)) 返回 } 完成(.success(数据!)) } task.resume() } } 但正如您所知,由于
转义闭包
,数据总是
的“demo”

那么,在网络请求完成后,如何在不修改函数
funcName
的参数的情况下返回数据呢


如果未修改函数的参数。

我是swift的新手,真是不知所措。如果你能帮我的话,非常感谢


您还必须将
funcName
修改为completion
closure
,而不是
return

func funcName(completion: @escaping (String) -> Void) {
    var data = "demo"
    DataLoader.fetch { result in
        if case .success(let fetchedData) = result {
            data = fetchedData
        } else {
            data = "Fail"
        }
        completion(data)
    }
}
使用方法:

funcName { name in
    print(name)
}

但正如您所知,数据将始终是“演示”的,因为要逃避闭包。。数据将被演示,因为它将在网络请求完成并调用关闭之前返回值。这是否回答了您的问题?你需要做一个“逃跑”动作!谢谢,伙计。是的,我知道,但我只想保留
funcName
的参数,使其成为一个覆盖函数。请解释你问题中“我只想保留funcName的参数,使其成为一个覆盖函数”的意思。如果函数的参数没有修改。