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
相关产品推荐
相关产品推荐

