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

Swift报Type of expression is ambiguous without more context错误如何解决

错误原因

  • 闭包传参语法错误:调用getGarbageSchedule方法时,不需要在completion参数位置显式写(GarbageModel?) -> Void类型声明,多余的类型声明导致编译器无法匹配方法签名,触发类型歧义报错。
  • 字符串格式化语法错误:String(format: "%s")是用于C语言字符串的占位符,Swift的String类型需要用%@占位符,同时直接强制解包可选值容易触发运行时崩溃,建议增加可选绑定判断。

修复后调用代码

let garbageService = GarbageService()

// 写法1:标准参数传参
garbageService.getGarbageSchedule(street: "HATHAWAY DR", completion: { garbageData in
    if let street = garbageData?.street {
        print("STREETS: \(street)")
        // 若需要使用format写法可替换为下行
        // print("STREETS: "+String(format:"%@", street))
    }
})

// 写法2:Swift 尾随闭包语法(更简洁)
garbageService.getGarbageSchedule(street: "HATHAWAY DR") { garbageData in
    if let street = garbageData?.street {
        print("STREETS: \(street)")
    }
}

其他潜在问题优化建议

原代码中garbageBaseURL!是隐式强制解包,如果URL初始化失败会直接崩溃,建议增加解包判断:

func getGarbageSchedule(street : String,completion: @escaping (GarbageModel?) -> Void)
{
    guard let baseURL = garbageBaseURL, 
          let garbageURL = URL(string:"\(street)",relativeTo: baseURL) else {
        completion(nil)
        return
    }
    let clientApi = networkManager(url : garbageURL)
    clientApi.DownloadJSONFromURL{ (jsonDictionary) in
        print(jsonDictionary as? [String : Any])
        if let garbageDataDictionary = jsonDictionary?["STREETS"] as? [String:Any]{
            let garbageData = GarbageModel(garbageDictionary: garbageDataDictionary)
            completion(garbageData)
        }
        else{
            completion(nil)
        }
    }
}

内容的提问来源于stack exchange,提问作者Advitiya Jadhav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:09:03