如何在URLComponents中传入动态基准货币参数以构建汇率API请求URL
如何在URLComponents中传入动态基准货币参数以构建汇率API请求URL
没问题,我来帮你搞定这个动态路径的问题!你现在的核心需求就是把路径里硬编码的eur.json替换成传入的baseCur参数对应的文件名,比如usd.json、cad.json这类,只需要动态拼接路径字符串就可以了,完全不用硬写死货币代码。
修改后的完整代码
@Observable final class GetRatesModel { @MainActor func checkForUpdates(baseCur: String) async throws { let rand = Int.random(in: 1000..<10000) let sRand = String(rand) var components = URLComponents() components.scheme = "https" components.host = "cdn.sampleCode.net" // 核心修改:动态拼接路径,用传入的baseCur替换硬编码的eur components.path = "/currency-api@latest/currencies/\(baseCur).json" components.queryItems = [URLQueryItem(name: "rand", value: sRand)] // 可选增强:验证生成的URL是否有效,避免后续请求出错 guard let url = components.url else { throw NSError(domain: "URLBuildError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无法生成有效的请求URL"]) } print(url) // 这里可以继续添加你的网络请求逻辑,比如用URLSession请求这个url } }
关键细节解释
动态路径拼接
把原来固定的"/currency-api@latest/currencies/eur.json"改成"/currency-api@latest/currencies/\(baseCur).json",当你传入不同的baseCur参数(比如"usd"、"cad")时,路径会自动生成对应的usd.json、cad.json,完全匹配你需要的URL格式。保留破缓存逻辑
你原来添加随机数rand来规避缓存的逻辑完全可以保留,这部分和动态货币代码的逻辑互不冲突,依然能有效防止服务器返回缓存的旧数据。可选的URL有效性验证
我额外加了guard let url = components.url的判断——虽然你的3位货币代码一般不会包含非法字符,但URLComponents在遇到无效路径时可能生成nil,加这个判断能让代码更健壮,避免后续网络请求因为无效URL崩溃。
这样修改后,你调用checkForUpdates(baseCur: "eur")、checkForUpdates(baseCur: "usd")等不同参数时,都会生成对应的正确URL,和你原来硬拼接字符串的效果完全一致,但用URLComponents的写法更规范、更易维护。
内容来源于stack exchange
相关产品推荐
相关产品推荐

