Swift:展开基本 Url 后附加PathComponent 不起作用

问题描述 投票:0回答:1

我实现了一些函数来获取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 等,但得到了相同的结果。我用错方法了?谢谢您的回复。

ios swift swiftui combine
1个回答
0
投票

你想要

url.appending(path:path)
,而不是
url.appendingPathExtension(path)

路径扩展类似于

.jpg
,只能附加到非空路径。

第二个代码块的成功不是因为您强制解开字符串,而是因为您使用了

appendingPathComponents

AppendingPathComponents
将检查文件系统以确定路径是否引用目录,如果是,它将在后面附加一个
/
。在这种情况下,您不使用文件路径,因此
appending(path:)
的效率稍高一些,因为默认情况下它不会检查文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.