Swift 4 URLComponents不连接路径变量

时间:2018-07-16 00:40:55

标签: swift swift4

我有一个Swift 4项目,我试图学习一些新东西并同时将它们结合起来,但是我仍然坚持某些似乎无法解决的问题。

def unique(nums):
    yield from dict.fromkeys(nums)

import Foundation protocol Endpoint { var baseUrl: String {get} var path: String {get} var queryItems: [URLQueryItem] {get} } extension Endpoint { var urlComponent: URLComponents{ var component = URLComponents(string: baseUrl) component?.path = path component?.queryItems = queryItems return component! } var request: URLRequest{ return URLRequest(url: urlComponent.url!) } } enum StoryEndpoint: Endpoint{ case storiesList(type: String) var baseUrl: String{ return "https://www.XXXXXXXXXXX.com/greeley" } var path: String{ switch self { case .storiesList(let type): return "/api/items" } } var queryItems: [URLQueryItem]{ return [] } } 下,您可以看到我已经设置了baseUrl,path和queryItems,但是如果我运行该项目,它将返回在另一个文件中定义的自定义错误标签。

但是,如果我更改:

enum StoryEndpoint

对此(基本合并baseUrl和路径):

    var baseUrl: String{
        return "https://www.XXXXXXXXXXX.com/greeley"
    }

它可以正确返回控制台中的解码项目。

我是否使用urlComponent设置了不正确的内容?

1 个答案:

答案 0 :(得分:2)

当您像这样实例化URLComponents时:

    var component = URLComponents(string: baseUrl)

它会创建如下内容:

[URLComponents]
    scheme: "https"
    host: "www.XXXXXXXXXXX.com"
    path: "/greeley"
    queryItems: nil
    ...

如果执行component?.path = path,您会发现会发生什么。

[URLComponents]
    scheme: "https"
    host: "www.XXXXXXXXXXX.com"
    path: "/api/items"
    queryItems: nil
    ...

这可能不是您想要的。

您可能需要编写如下内容:

    component?.path += path

(如果您认为考虑"/"有点烦人,则可能需要找到其他解决方法。)