我有一個String
,它有許多由&
符號附加的鍵值對。即:params = key1=Hello&key2=Hello World&key3=Hi Hello
Swift:獲取字符串中的所有鍵值對
有沒有辦法通過傳遞字符串中存在的鍵來提取值?例如,我想提取key1,key2,key3的值。
我有一個String
,它有許多由&
符號附加的鍵值對。即:params = key1=Hello&key2=Hello World&key3=Hi Hello
Swift:獲取字符串中的所有鍵值對
有沒有辦法通過傳遞字符串中存在的鍵來提取值?例如,我想提取key1,key2,key3的值。
您可以使用URLComponents
和URLQueryItem
反正通過創建一個虛擬的URL
let params = "key1=Hello&key2=Hello World&key3=Hi Hello"
if let components = URLComponents(string: "http://dummy.com/path?" + params.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!),
let queryItems = components.queryItems {
let arrayOfValues = queryItems.flatMap{ $0.value }
print(arrayOfValues)
}
謝謝,我試了一下,得到了所需的結果。 – JMS
let string = "key1=Hello&key2=Hello World&key3=Hi Hello"
let components = s.components(separatedBy: "&")
var dictionary : [String : String] = [:]
for component in components{
let pair = component.components(separatedBy: "=")
dictionary[pair[0]] = pair[1]
}
而在dictionary
中,您將得到您的鍵值對。
let params = "key1=Hello&key2=Hello World&key3=Hi Hello"
let sepparated = params.components(separatedBy: CharacterSet(charactersIn: "&="))
let keys = sepparated.enumerated().filter{$0.0 % 2 == 0}
print (keys) // [(offset: 0, element: "key1"), (offset: 2, element: "key2"), (offset: 4, element: "key3")]
'index(of:)'是不夠的,因爲一個等於稍後發生的鍵的值會破壞代碼。 'let keys = separated.enumerated()。filter {$ 0.0%2 == 0}'代替O(n)而不是O(n^2)。 – Palle
已更新。謝謝!@Palle :) –
如果*串*爲URL的一部分來看看'URLComponents'和'URLQueryItem' – vadian
不,它不是URL的一部分。我收到一個只有參數的編碼字符串。解碼後,我得到上面的字符串。 – JMS
只是使用[yourString componentSeoratedByString:@「&"];你會發現一個數組,現在操作你的數組 –