2017-08-17 18 views
1

我有一個String,它有許多由&符號附加的鍵值對。即:params = key1=Hello&key2=Hello World&key3=Hi HelloSwift:獲取字符串中的所有鍵值對

有沒有辦法通過傳遞字符串中存在的鍵來提取值?例如,我想提取key1,key2,key3的值。

+0

如果*串*爲URL的一部分來看看'URLComponents'和'URLQueryItem' – vadian

+0

不,它不是URL的一部分。我收到一個只有參數的編碼字符串。解碼後,我得到上面的字符串。 – JMS

+0

只是使用[yourString componentSeoratedByString:@「&"];你會發現一個數組,現在操作你的數組 –

回答

0

您可以使用URLComponentsURLQueryItem反正通過創建一個虛擬的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) 
} 

也看到Best way to parse URL string to get values for keys?

+1

謝謝,我試了一下,得到了所需的結果。 – JMS

1
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中,您將得到您的鍵值對。

0
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")] 
+0

'index(of:)'是不夠的,因爲一個等於稍後發生的鍵的值會破壞代碼。 'let keys = separated.enumerated()。filter {$ 0.0%2 == 0}'代替O(n)而不是O(n^2)。 – Palle

+0

已更新。謝謝!@Palle :) –

相關問題