как получить значение параметра URL с помощью Swift 4.1

Я пытаюсь получить параметры для URL-адресов и пытаюсь получить только дату, а не время URL-адреса.

http://aa.no-ip.biz:8001/hf_tracker/api/history.php?accesskey=12345&Vehilce=1618&FromDate=2018-05-10 13:11&ToDate=2018-05-14 12:11

    extension URL {
        func valueOf(_ queryParamaterName: String) -> String? { 
           guard let url = URLComponents(string: self.absoluteString) else { 
              return nil 
           } 
           return url.queryItems?.first(where: { $0.name == queryParamaterName})?.value 
        } 
   }

    let newURL = URL(string: "assetlinkasia.no-ip.biz:8001/hf_tracker/api/…)! 
    newURL.valueOf("toDate") 
    newURL.valueOf("fromDate") 

Как я могу получить только дату, а не время?


person Rehan Meo    schedule 30.05.2018    source источник
comment
покажите нам свой код, что вы пробовали   -  person PPL    schedule 30.05.2018
comment
разместите соответствующий код для облегчения понимания @Rehan Meo   -  person Ganesh Manickam    schedule 30.05.2018
comment
URL-адрес расширения { func valueOf(_ queryParamaterName: String) -> String? { Guard let url = URLComponents(string: self.absoluteString) else { return nil } return url.queryItems?.first(where: {$0.name == queryParamaterName})?.value } } let newURL = URL(string: assetlinkasia.no-ip.biz:8001/hf_tracker/api/)! новыйURL.valueOf(toDate) новыйURL.valueOf(fromDate)   -  person Rehan Meo    schedule 30.05.2018


Ответы (2)


Вот как вы можете это сделать,

Ваше расширение URL здесь, из здесь

extension URL {
    func valueOf(_ queryParamaterName: String) -> String? {
        guard let url = URLComponents(string: self.absoluteString) else { return nil }
        return url.queryItems?.first(where: { $0.name == queryParamaterName })?.value
    }
}

Ваш код идет сюда,

let string = "http://aa.no-ip.biz:8001/hf_tracker/api/history.php?accesskey=12345&Vehilce=1618&FromDate=2018-05-10 13:11&ToDate=2018-05-14 12:11"
let test = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: test!)!
let fromDate = url.valueOf("FromDate")
let toDate = url.valueOf("ToDate")

let date1 = fromDate?.components(separatedBy: " ").first
print(date1)

let date2 = toDate?.components(separatedBy: " ").first
print(date2 )

Вывод будет ниже,

2018-05-10
2018-05-14
person PPL    schedule 30.05.2018

В моих приложениях используется вспомогательная функция, которая анализирует URL-адрес и возвращает необязательный словарь:

func parameters(for url: URL) -> [String: String]? {
    guard let urlQuery = url.query else { return nil }

    // Create all parameters dictionary
    let queryArray = urlQuery.split { $0 == "&" }.map(String.init)
    var parametersDict: [String: String] = [:]
    for queryParameter in queryArray {
        // split the queryParam into key / value
        let keyValueArray = queryParameter.split{ $0 == "=" }.map(String.init)
        let key = keyValueArray.first!
        let value = keyValueArray.last!.removingPercentEncoding!
        parametersDict.updateValue(value, forKey: key)
    }

    return parametersDict
}

И используйте это так:

let params = parameters(for: URL(string: "https://someurl.com?name=john")!)
if let name = params?["name"] {
    print(name)
}

Или вы можете добавить var к расширению URL:

extension URL {
    var parameters: [String: String]? {
        guard let urlQuery = self.query else { return nil }

        // Create all parameters dictionary
        let queryArray = urlQuery.split { $0 == "&" }.map(String.init)
        var parametersDict: [String: String] = [:]
        for queryParameter in queryArray {
            // split the queryParam into key / value
            let keyValueArray = queryParameter.split{ $0 == "=" }.map(String.init)
            let key = keyValueArray.first!
            let value = keyValueArray.last!.removingPercentEncoding!
            parametersDict.updateValue(value, forKey: key)
        }

        return parametersDict
    }
}

И получить параметр:

let params = URL(string: "https://someurl.com?name=john")!.parameters
if let name = params?["name"] {
    print(name)
}
person Au Ris    schedule 30.05.2018