【问题标题】:Swift: Get all key value pairs from a StringSwift:从字符串中获取所有键值对
【发布时间】:2018-01-25 12:57:37
【问题描述】:

我有一个String,它有许多键值对,后面附有& 符号。即:params = key1=Hello&key2=Hello World&key3=Hi Hello

有没有办法通过传递字符串中存在的键来提取值?比如我要提取key1,key2,key3的值。

【问题讨论】:

  • 如果 string 是 URL 的一部分,请查看 URLComponentsURLQueryItem
  • 不,它不是 URL 的一部分。我收到一个仅包含参数的编码字符串。解码后,我得到了上面的字符串。
  • 只需使用 [yourString componentSeoratedByString:@"&"];你会找到一个数组。现在操作你的数组。

标签: ios swift3 alamofire


【解决方案1】:
let string = "key1=Hello&key2=Hello World&key3=Hi Hello"

let components = string.components(separatedBy: "&")


var dictionary: [String : String] = [:]

for component in components{
  let pair = component.components(separatedBy: "=")
  dictionary[pair[0]] = pair[1]
}

dictionary 中,您将获得您的键值对。

【讨论】:

  • 为我工作,谢谢
【解决方案2】:

您仍然可以通过创建一个虚拟 URL 来使用 URLComponentsURLQueryItem

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?

【讨论】:

  • 谢谢。我试了一下,得到了所需的结果。
【解决方案3】:
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) 中运行。
猜你喜欢
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2016-05-07
相关资源
最近更新 更多