2017-01-24 33 views
0

我正在构建带有常量的struct以形成URL端点。使用结构构建端点

struct Constants { 
    struct Api { 
     static let BaseUrl = "http://srv.com/ws_rest/" 
     static let LoginPassword1 = "credentials?member_account_pwd=" 
     static let LoginUsername2 = "&member_account_login=" 
     static let Login3 = "&channelId=4" 
    } 
} 

最终的结果是:

let url = URL.baseUrlWith(string: Constants.Api.LoginPassword1 + "pass" + Constants.Api.LoginUsername2 + "user" + Constants.Api.Login3) 

这仅仅是一个终端。有没有人知道更好的实践方法呢?

+0

这就是我命名空间静态变量的方式。我认为这是正确的。 – sdasdadas

回答

1

它可能是有用的功能,可帮助您

func urlString(with baseURL: String, and parameters: [String: String])->String { 
     var mutableBaseURL = baseURL 
     for (i, param) in parameters.enumerated() { 
      var symbol = "&" 
      if i == 0 { symbol = "?" } 

      mutableBaseURL += "\(symbol)\(param.key)=\(param.value)" 
     } 
     return mutableBaseURL 
    } 

所以你常数会成为像

struct Constants { 
    struct Endpoints { 
     static let login = "http://srv.com/ws_rest/credentials" 
    } 

    struct Parameters { 
     static let username = "member_account_login" 
     static let password = "member_account_pwd" 
     static let channelId = "channelId" 
    } 
} 

某处在你的代码,你将有

let url = urlString(with: Constants.Endpoints.login, and: [ 
       Constants.Parameters.username: username, 
       Constants.Parameters.password: pass, 
       Constants.Parameters.channelId: "4" 
      ]) 

希望能帮助到你。

+0

这是一个很好的起点。荣誉 – bruno