2017-10-06 14 views
1

나는 AppDelegate 메서드를 사용하여 url을 가지고있다.사전에 url.query를 신속하게 변환하는 방법?

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { 

} 

URL이 내 질문이 쉽게 액세스 할 수 있도록 사전에 변환 할 수있는 방법입니다 www.wesite.com/shareplace.html?placeid=123

보인다.

편집 : 나는 어떤 웹 사이트의 일부 코드를 발견하지만, 엑스 코드 9

extension URL { 
    var queryDictionary: [String: AnyObject]? { 
     return URLComponents(url: self, resolvingAgainstBaseURL: false)? 
      .queryItems? 
      .reduce([:], combine: { (var result: [String: AnyObject], queryItem) -> [String: AnyObject] in 
       if queryItem.value?.containsString(",") ?? false { 
        let array = queryItem.value?.componentsSeparatedByString(",") 

        result[queryItem.name] = array 
       } 
       else { 
        result[queryItem.name] = queryItem.value 
       } 

       return result 
      }) 
    } 
} 

.reduce([:], combine: { (var result: [String: AnyObject], queryItem) -> [String: AnyObject] in (VAR 결과) 매개 변수는 'var에'지정

답변

2

단순 확장

extension URL { 
    var queryDictionary: [String: String]? { 
     guard let query = URLComponents(string: self.absoluteString)?.query else { return nil} 

     var queryStrings = [String: String]() 
     for pair in query.components(separatedBy: "&") { 

      let key = pair.components(separatedBy: "=")[0] 

      let value = pair 
       .components(separatedBy:"=")[1] 
       .replacingOccurrences(of: "+", with: " ") 
       .removingPercentEncoding ?? "" 

      queryStrings[key] = value 
     } 
     return queryStrings 
    } 
} 

USAGE

let urlString = "http://www.youtube.com/video/4bL4FI1Gz6s?hl=it_IT&iv_logging_level=3&ad_flags=0&endscreen_module=http://s.ytimg.com/yt/swfbin/endscreen-vfl6o3XZn.swf&cid=241&cust_gender=1&avg_rating=4.82280613104" 
let url = URL(string: urlString) 
print(url!.queryDictionary ?? "NONE") 
0
이 없을 수에 오류를 보여주는 것

대안 검색 :

extension URL { 
    var queryDictionary: [String: AnyObject]? { 
     return URLComponents(url: self, resolvingAgainstBaseURL: false)? 
      .queryItems? 
      .reduce([:], combine: { (lastResult: [String: AnyObject], queryItem) -> [String: AnyObject] in 
       var result = lastResult 
       if queryItem.value?.containsString(",") ?? false { 
        let array = queryItem.value?.componentsSeparatedByString(",") 

        result[queryItem.name] = array 
       } 
       else { 
        result[queryItem.name] = queryItem.value 
       } 

       return result 
      }) 
    } 
} 
0
guard let urlQuery = URL(string: "https://en.wikipedia.org/wiki/Query_string?title=Main_page&action=raw")?.query else { 
    return 
} 

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

print(parametersDict) 
// prints ["action": "raw", "title": "Main_page"]