我实现了一些函数来获取Url,但是在解开基本url后我无法获取完整的url。我有这两个变量如下:
var baseUrl: URL? {
switch self{
case .getNews:
if let url = URL(string: "https://api.lil.software"){
return url
}else{
return nil
}
}
}
var path: String? {
return "/news"
}
我想获取完整的Url,所以我实现了如下功能
var urlRequest: URLRequest? {
if var url = self.baseUrl, var path = self.path{
return URLRequest(url: url.appendingPathExtension(path))
}else{
return nil
}
}
当我打电话时
endpoint.urlRequest!
我想我应该得到“https://api.lil.software/news”,但我得到了“https://api.lil.software”
但是,如果我实现了
var urlRequest: URLRequest?
而没有按如下方式展开基本 url,我可以获得完整的 url,如“https://api.lil.software/news”
var urlRequest: URLRequest? {
return URLRequest(url: self.baseUrl!.appendingPathComponent(self.path!))
}
为什么会有不同?因为如果变量?谢谢你的帮助。
我尝试使用guard let/var 等,但得到了相同的结果。我用错方法了?谢谢您的回复。
你想要
url.appending(path:path)
,而不是url.appendingPathExtension(path)
路径扩展类似于
.jpg
,只能附加到非空路径。
第二个代码块的成功不是因为您强制解开字符串,而是因为您使用了
appendingPathComponents
。
AppendingPathComponents
将检查文件系统以确定路径是否引用目录,如果是,它将在后面附加一个 /
。在这种情况下,您不使用文件路径,因此 appending(path:)
的效率稍高一些,因为默认情况下它不会检查文件系统。