You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift报Cannot convert value of type '()'闭包类型转换错误如何解决

编译错误修复方案

报错信息:Cannot convert value of type () to expected argument type (Data?, URLResponse?, Error?) -> Void
错误截图:
错误截图

错误原因

  • 传参逻辑错误:completionHandler参数要求传入函数引用,你当前的写法是直接调用handel函数,调用函数的返回值是空类型(),和参数要求的函数类型不匹配。
  • 回调参数类型错误:自定义的handel函数第二个参数类型应为URLResponse?,你误写为URLSession?,和系统要求的回调参数类型不一致。

修正后代码

struct WeatherManager {
    let weatherURL = ""
    func fetchWeather(cityName : String){
        let urlString = "\(weatherURL)&q=\(cityName)"
        performRequest(urlString: urlString)
    }
    func performRequest(urlString : String){
        //1- 创建URL
        if let url = URL(string: urlString){
            //2- 创建URLSession
            let session = URLSession(configuration: .default)
            //3- 给session分配任务,直接传入函数引用即可
            let task = session.dataTask(with: url, completionHandler: handel)
            //4- 启动任务
            task.resume()
        }
    }
    // 修正第二个参数的类型为URLResponse?
    func handel(data:Data? , urlResponse : URLResponse? , error : Error?){
        if error != nil {
            print(error!)
            return
        }
        if let safeData = data{
            let dataString = String(data: safeData, encoding: .utf8)
            print(dataString ?? "数据转字符串失败")
        }
    }
}

可选简化写法

你也可以直接使用尾随闭包语法写回调逻辑,无需单独定义handel函数:

func performRequest(urlString : String){
    if let url = URL(string: urlString){
        let session = URLSession(configuration: .default)
        let task = session.dataTask(with: url) { data, response, error in
            if let error = error {
                print(error)
                return
            }
            guard let safeData = data else { return }
            print(String(data: safeData, encoding: .utf8) ?? "数据解析失败")
        }
        task.resume()
    }
}

内容的提问来源于stack exchange,提问作者Huzaifa Aliyash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:09:02