完成和返回值

时间:2018-03-14 21:09:33

标签: swift completionhandler

我正在努力解决这段代码问题。我试图返回我从api链接获得的json数据。我读了几个其他的问题,但我没有找到让它工作。所有游乐场代码都在这里。提前谢谢!

import UIKit
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

struct WebsiteDescription: Decodable {
    let ETH: Devise
}
struct Devise: Decodable {
    let EUR : Double
}

func refreshPrices(DeLaDevise nom: String, completion: @escaping ((Double) -> Double)) -> Void {

    guard let url = URL(string: "https://min-api.cryptocompare.com/data/pricemulti?fsyms=" + nom + "&tsyms=EUR") else { return }
    URLSession.shared.dataTask(with: url) { (data, reponse, error) in
        guard let data = data else { return }
        var prix: Double = 0.0
        print(data)
        do {
            let website = try JSONDecoder().decode(WebsiteDescription.self, from: data)
            prix = website.ETH.EUR
            completion(prix)
        } catch let jsonErr {
            print(jsonErr)
        }
        }.resume()
    }

   refreshPrices(DeLaDevise: "ETH") { prix in
            print(prix)
   }

1 个答案:

答案 0 :(得分:1)

几乎。

似乎矛盾但是闭包确实返回一些东西,它会传递一个参数。

错误消息为您提供了精确的线索:

  

无法转换类型'()'的值关闭结果类型' Double'

只需将返回值更改为Void又名()

func refreshPrices(DeLaDevise nom: String, completion: @escaping (Double) -> ()) -> Void {