Pre*_*eek 2 dictionary ios swift
我有Swift字典:
private var params = [String : AnyObject]()
Run Code Online (Sandbox Code Playgroud)
它包含查询项,例如:
"lat" = "40""lon" = "100"我想将此字典映射到NSURLQueryItem数组。我想使其“笨拙”:
params.map{NSURLQueryItem.init}
Run Code Online (Sandbox Code Playgroud)
但是我得到一个错误。即使我将地图更改为[String:String?]。我知道我可以做一些像这样优雅的单线工作。谁能告诉我如何?
您只需要添加一个failable initializer到NSURLQueryItem这样的元组即可(String, AnyObject)
extension NSURLQueryItem {
convenience init?(tuple: (String, AnyObject)) {
guard let value = tuple.1 as? String else { return nil }
self.init(name: tuple.0, value: value)
}
}
Run Code Online (Sandbox Code Playgroud)
let params: [String:AnyObject] = ["lat": "40", "lon": "100"]
let queryItems = params.flatMap(NSURLQueryItem.init)
Run Code Online (Sandbox Code Playgroud)
您对字典的值是否需要是可选的?在字典中,当您将其键分配为 nil 时,该条目将被删除。
var params = [String:String?]()
params["lat"] = "40"
params["lon"] = "100"
params["key"] = "hey"
print(params) //result: ["lat": Optional("40"), "lon": Optional("100"), "key": Optional("hey")]
params["key"] = nil
print(params) //result: ["lat": Optional("40"), "lon": Optional("100")]
Run Code Online (Sandbox Code Playgroud)
我建议使用非可选值字典。我已经成功编写了以下代码:
import UIKit
var params = [String:String]()
params["lat"] = "40"
params["lon"] = "100"
let nsurl = params.map() {NSURLQueryItem.init(name: $0, value: $1)}
print(nsurl)
//Result:
//[<NSURLQueryItem 0x7f8252d29730> {name = lat, value = 40}, <NSURLQueryItem 0x7f8252d29700> {name = lon, value = 100}]
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
| 归档时间: |
|
| 查看次数: |
3912 次 |
| 最近记录: |