как динамически передавать значение в struct

#ios #swift #struct

#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=bitcoinamp;"
        static let date = "date=2019-04-04amp;"
        static let sortBy = "sortBy=Dateamp;"

    }

        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=bitcoinamp;"
    static let date = "date=2019-04-04amp;"
    static let sortBy = "sortBy=Dateamp;"
  

Ваши входные данные помогут мне.

Комментарии:

1. Не связано, но почему бы не использовать URLQueryItems вместо жесткого кода строковые значения?

2. Что означает «сконструировать формат URL из другого класса»? Неясно, в чем здесь проблема.

3. Как передавать значения в struct, который создается в constants.swift. с другого контроллера представления. Результатом для этого является формирование URL.

4. Вы просто переводите бессмыслицу на другой уровень: что означает «передавать значения в struct»? Покажите , что вы пытаетесь сделать и почему у вас это не получается.

Ответ №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=bitcoinamp;"
let date = "date=2019-04-04amp;"
let sortBy = "sortBy=Dateamp;"

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-адресов.

Комментарии:

1. Спасибо, Дэвид, это помогает мне.

2. @kiran пожалуйста, примите ответ, если это решит вашу проблему.