我有一个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设置了不正确的内容?
答案 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
(如果您认为考虑"/"
有点烦人,则可能需要找到其他解决方法。)