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

Swift:URLComponents生成URL错误,返回结果不符合预期求助

问题原因及解决方案

问题出在URLComponents的percentEncodedHost属性使用错误——这个字段不能包含端口号,端口需要单独通过port属性设置。你直接把localhost:8080传给host,导致URLComponents无法正确解析主机和端口,后续设置path时出现解析异常,最终生成了错误的URL。

修正后的代码方案一(拆分host和port)

static let baseHost = "localhost"
static let basePort = 8080

static func resource(for resourceName: String) -> URL? {
    var components = URLComponents()
    components.scheme = "http"
    components.host = baseHost
    components.port = basePort
    components.path = "/\(resourceName)"
    return components.url
}

修正后的代码方案二(动态拆分baseUrl)

如果希望保留baseUrl的字符串格式,可以手动拆分主机和端口:

static let baseUrl = "localhost:8080"

static func resource(for resourceName: String) -> URL? {
    let urlParts = baseUrl.split(separator: ":")
    guard urlParts.count == 2, let portNumber = Int(urlParts[1]) else {
        return nil
    }
    
    var components = URLComponents()
    components.scheme = "http"
    components.host = String(urlParts[0])
    components.port = portNumber
    components.path = "/\(resourceName)"
    return components.url
}

这样调用resource(for: "my-pets")就能正确生成http://localhost:8080/my-pets了。

内容的提问来源于stack exchange,提问作者Mary Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:36:34