簡體   English   中英

如何在函數中使用 escaping 閉包返回一些數據?

[英]How to use a escaping closure in a func to return some data?

在我的代碼中,我想在網絡請求后返回一些數據。

    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 closuredata將始終是"demo"

那么如何在網絡請求完成后返回數據而不修改 function funcName的參數?

如果不修改function的參數。

我是 swift 的新手,真的很茫然。如果你能幫助我,非常感謝!

您還必須將funcName修改為完成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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM