Я реализовал некоторые функции для получения 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 и может быть добавлено только к непустому пути.
Успех вашего второго блока кода обусловлен не тем, что вы принудительно развернули строки, а тем, что вы использовали appendingPathComponent.
AppendingPathComponent проверит файловую систему, чтобы определить, относится ли путь к каталогу, и если да, то добавит в конце /. В этом случае вы не работаете с путями к файлам, поэтому appending(path:) немного более эффективен, поскольку по умолчанию не проверяет файловую систему.
Вы также можете упростить свой код, поскольку вы возвращаете необязательные параметры, нет необходимости явно проверять nil, а затем возвращать nil
var baseUrl: URL? {
switch self {
case .getNews:
return URL(string: "https://api.lil.software")
}
}
var path: String? {
return "/news"
}
var urlRequest: URLRequest? {
guard let url = self.baseUrl, let path = self.path else {
return nil
}
return URLRequest(url: url.appending(path:path))
}
Вы тестируете
appendingPathComponent()противappendingPathExtension()... Вы тестируете разные методы, отсюда и разные результаты...