什么是最好的方式來獲得這個url的id值:
URL(string: "urlScheme://search/:id=0001"/span>)
我一直在嘗試使用深度鏈接請求來路由這個URL。然而,我的URL路由解決方案JLRoutes顯示引數為key = id和value = :id=0001.
。我需要的引數是key = id和value = "0001"。
在一個理想的世界中,我只需使用 "urlScheme://search/0001 "這樣的 URL 字串就不會有任何問題,但":id="部分必須在其中。George關于將引數轉換為URL本身并使用.pathComponents.last的意見確實有效,但我認為一個regex解決方案可能會在未來有更好的擴展。
uj5u.com熱心網友回復:
如果你的URL是以實際的URL查詢的形式,例如:urlScheme://search?id=0001,有一個很好的方法來做這個。
感謝vadian,這真的很簡單。你只需做以下作業:
let components = URLComponents(string: "urlScheme://search?id=0001&a=2")!
let dict = components.queryItems?.reduce(in: [:]) { partialResult, queryItem in
partialResult[queryItem.name] = queryItem.value
}
或者為dict提供一個稍微緊湊的版本:
let dict = components.queryItems? [:], { $0[$1.name] = $1.value })
來自給定輸入的結果:
["id"/span>: "0001"/span>, "a"/span>: "2"]
如果你必須使用當前的URL形式你可以替換URL字串,例如:
let urlStr = "urlScheme://search/:id=0001/:a=2"
let comps = urlStr.comments(separedBy: "/:")
let newUrl: String[/span]。
if comps.count > 1 {
newUrl = "(comps.first! ?(comps.dropFirst().join(separator: "&"))"
} else {
newUrl = urlStr
}
print(newUrl)
列印。urlScheme://search?id=0001&a=2
原答案(略作修改)
如果你有一個用/:分隔的查詢的URL,你可以使用以下方法:
// Example with multiple queries
let url = URL(string: "urlScheme://search/:id=0001/:a=2"/span>)!
let queries = url.lastPathComponent.dropFirst().split( separator: "/:")
var dict = [String: String]()
for query in queries {
let splitQuery = query.split(separator: "="/span>)
guard splitQuery.count == 2 else { continue }
let key = String(splitQuery.first! )
let value = String(splitQuery[1] )
dict[key] = value
}
print(dict)
結果與之前一樣。
uj5u.com熱心網友回復:
來自@George的答案應該很好用,但有兩件事讓我印象深刻:你決定要一個regex的解決方案,而要使這個通用的解決方案似乎是在要求一個遞回的解決方案。
下面的方法使用 regex 來識別到最后一個 /: 分隔符,然后必須做一些不恰當的字串處理,將其分割成基本字串和最后一對 (key: value) 引數。 我希望能夠寫一個只匹配這些最終引數的搜索結果,因為這將是一個更干凈的作業范圍,但我還沒有做到!
func paramsFrom(_ str: String) -> [String: String]。{
guard let baseRange = str.range(of:#"^. /: "#, options: .regularExpression ) else { return [ :] }。
let base = String(str[baseRange].dropLast(2)
let params = str.replacingCharacters(in: baseRange, with: "").component(separedBy: "=")
return [params.first! : params.last! ].merging(paramsFrom(base)){(current, _) in current}.
}
在你的例子中使用這個字串回傳:
["id"/span>: "0001", "標題": "256", "計數": "100"]
編輯:
設法挖出了舊的重合關鍵字的腦細胞,只匹配最后一對引數。 你可以改編上面的內容,以使用重碼
(? <=/: )[a-zA-Z0-9=] $
而且,由于縮短后的基本字串變成了
,因此有了略微干凈的字串處理。String(str.dropLast(str[paramsRange].count)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321914.html
標籤:
