如何传递值以动态构造

时间:2019-04-09 20:06:38

标签: ios swift struct

我正在尝试动态形成URL。

我正在使用Struct构造它以形成结果url

Constants.Swift
import Foundation

private struct Domains {

    static let Local = "localhost IP"
   static let QA = "QA.Environment"
    static let UAT = "http://test-UAT.com"

}

// HardCoded URLRoutes

    private struct URLRoutes{

        static let query = "query=bitcoin&"
        static let date = "date=2019-04-04&"
        static let sortBy = "sortBy=Date&"

    }

        private static let constructionURL = Domain.local+URLRoutes.query + URLRoutes.date + URLRoutes.sortBy  + API.Key

        static var ResultantURL: String {
            return constructionURL
        }

我正在尝试使此动态消息传递其他类的值以形成动态网址。

    private struct URLRoutes{

        var query : String
        var date : String?
        var sortBy : String?         
    }

从另一个试图访问结果URL的类       url = URL(string:URLRoutes.ResultantURL)!

但是如何从另一个类构造url的形式?

    static let query = "query=bitcoin&"
    static let date = "date=2019-04-04&"
    static let sortBy = "sortBy=Date&"

您的输入将指导我。

1 个答案:

答案 0 :(得分:1)

这是您想要做的游乐场代码:

struct API {
    static let Key = "ABC123"
}

struct URLRoutes{

    var query : String
    var date : String?
    var sortBy : String?

    var constructionURL: String {
        return  query + (date ?? "") + (sortBy  ?? "") + API.Key
    }
}

let query = "query=bitcoin&"
let date = "date=2019-04-04&"
let sortBy = "sortBy=Date&"

let myRoute = URLRoutes(query: query, date: date, sortBy: sortBy)

print(myRoute.constructionURL)

但是,这并不是很理想,也没有使用Apple提供的结构。这是另一种方法:

struct URLRoute {
    var queryItems:[URLQueryItem]

    init(query: String, date:String?, sortBy:String?) {
        queryItems = [
            URLQueryItem(name: "query", value: query),
            URLQueryItem(name: "date", value: date),
            URLQueryItem(name: "sortBy", value: sortBy),
            URLQueryItem(name: "api_key", value: API.Key)
        ]
    }

    var constructionURL:String {
        get {
            var component = URLComponents(string: "")
            component?.queryItems = queryItems
            return component?.string ?? ""
        }
    }
}

let betterRoute = URLRoute(query: "bitcoin", date: "2019-04-04", sortBy: "Date")
print(betterRoute.constructionURL)

您可以使用URLComponents为您创建有效的URL进行很多繁重的工作。