#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 пожалуйста, примите ответ, если это решит вашу проблему.