2017-02-09 44 views
2

有简单的端点枚举,如:斯威夫特:使URL从相对字符串基础URL

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 =“/服务器 - TTP:// www.traccar.org/api”。那是什么?

+1

可以简化您的网址属性' var url:URL {return URL(string:path,relativeTo:baseURL)! }'也不需要在你的服务器字符串中包含斜杠'return“server”' –

回答

3

这是描述URL的方式。你的网址是正确的,不用担心。打印url.absoluteString说服自己

你可以得到绝对URL与url.absoluteURL

+0

不是真的,小小的斜线产生了巨大的差异。当slash('/ server')在path组件中时我得到了错误(在Alamofire.request调用中使用url参数作为URLConvertible,但是当我将该斜杠包含到baseURL并将其从路径中移除时,一切正常! – zzheads

+0

而且在这两种情况下(成功与失败)url.absoluteString是一样的... – zzheads

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! 
    } 
} 

URL字符串是/服务器 - http://demo.traccar.org/api

不同的是TraccarEndpoint不继承端点。 EndPoint是否有baseURL字符串是“http://www.traccar.org/api”? 如果是这样,你可以看到这个网页Method Dispatch in Swift

它可以帮助你知道关于swift的方法调度。

0

我找到了解决方案从路径移动/到基本URL:

http://demo.traccar.org/api/ 

代替

http://demo.traccar.org/api 

和:的server代替/server