Swift URL appendPathComponent是否替换?使用%3F

Swift URL appendPathComponent是否替换?使用%3F,swift,Swift,我有一个路由器,里面有线路 var url = URL(string: MyRouter.baseURLString)! url.appendPathComponent(relativePath) 这将用API服务器拒绝的“%3F”替换“?”。我怎样才能解决这个问题?对该字符进行编码是错误的。因为?不是路径的一部分。它是一个分隔符,表示查询字符串的开头。您可以在中阅读URL的不同组件。每个组件都有一组有效字符,不在该组中的任何内容都需要进行百分比转义。最好的选择是使用URLComponent

我有一个路由器,里面有线路

var url = URL(string: MyRouter.baseURLString)!

url.appendPathComponent(relativePath)

这将用API服务器拒绝的“%3F”替换“?”。我怎样才能解决这个问题?对该字符进行编码是错误的。

因为
不是路径的一部分。它是一个分隔符,表示查询字符串的开头。您可以在中阅读URL的不同组件。每个组件都有一组有效字符,不在该组中的任何内容都需要进行百分比转义。最好的选择是使用
URLComponents
,它会自动为您处理转义:

var urlComponents = URLComponents(string: MyRouter.baseURLString)!
urlComponents.queryItems = [
    URLQueryItem(name: "username", value: "jsmith"),
    URLQueryItem(name: "password", value: "password")
]

let url = urlComponents.url!

在路径组件中包含“?”是错误的。它被用作路径和查询之间的分隔符,因此如果您确实希望它出现在路径中,则需要对其进行百分比编码。如果要创建带有查询的URL,如
https://example.com?name=value
,您可以尝试使用
URLComponents
或仅使用字符串连接。我将其更改为使用字符串连接。相对路径的格式为/search?因为=1,您是否成功创建了它?如果您现在还发现一些困难,请编辑您的问题并添加一些详细信息。您需要创建url字符串并设置url编码