как передать значение, чтобы структурировать динамически - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь сформировать 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
        }

Я пытаюсь сделать эту динамическую передачу значения из другого класса, чтобы сформировать динамический URL.

    private struct URLRoutes{

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

Из другого класса пытается получить доступ к результирующему URL url = URL (строка: URLRoutes.ResultantURL)!

но как я могу построить формат URL из другого класса?

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

Ваш вклад поможет мне.

1 Ответ

1 голос
/ 09 апреля 2019

Вот код игровой площадки, который делает то, что вы хотите:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...