具有简单的端点枚举,例如:
enum TraccarEndpoint: Endpoint {
case server
var baseURL: URL {
return URL(string: "http://demo.traccar.org/api")!
}
var path: String {
switch self {
case .server:
return "/server"
}
}
var url: URL {
let path = self.path
let baseURL = self.baseURL
let url = URL(string: path, relativeTo: baseURL)
return url!
}
}
期待self.url =“http://demo.traccar.org/server”,但是self.url =“/ server - ttp://www.traccar.org/api”。那是什么?
答案 0 :(得分:4)
这是描述URL的方式。你的网址是正确的,不用担心。打印url.absoluteString
以说服自己
您可以使用url.absoluteURL
答案 1 :(得分:0)
好吧,我复制你的代码
enum TraccarEndpoint {
case server
var baseURL: URL {
return URL(string: "http://demo.traccar.org/api")!
}
var path: String {
switch self {
case .server:
return "/server"
}
}
var url: URL {
let path = self.path
let baseURL = self.baseURL
let url = URL(string: path, relativeTo: baseURL)
return url!
}
}
网址字符串是/ server - http://demo.traccar.org/api。
不同的是TraccarEndpoint不继承Endpoint。 EndPoint的baseURL字符串是“http://www.traccar.org/api”吗? 如果是,您可以看到此网络Method Dispatch in Swift
它可以帮助您了解有关swift的Method Dispatch。
答案 2 :(得分:0)
我发现解决方案将/
从路径移动到baseURL:
http://demo.traccar.org/api/
而不是
http://demo.traccar.org/api
和:server
代替/server
答案 3 :(得分:0)
以下是baseURL
和相对路径如何相互作用的一些示例:
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"];
[NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo
[NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz
[NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo
[NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo
[NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/
[NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/