如何在 Swift 中使用字典构建 URL
How to build a URL by using Dictionary in Swift
所以我在摆弄 iMessages
框架,为了将数据发送给另一个用户,数据必须作为 URLComponents
URL
发送。但是我不知道如何发送字典以用作 messages.url
值。
func createMessage(data: dictionary) {
/*
The Dictionary has 3 values, 1 string and two arrays.
let dictionary = ["title" : "Title Of Dictionary", "Array1" : [String](), "Array2" : [String]() ] as [String : Any]
*/
let components = URLComponents()
let layout = MSMessageTemplateLayout()
layout.image = UIImage(named: "messages-layout.png")!
layout.imageTitle = "\(dictionary["title"])"
let message = MSMessage()
message.url = components.url!
message.layout = layout
self.activeConversation?.insert(message, completionHandler: { (error: Error?) in
print("Insert Message")
})
}
有谁知道如何在 URLComponents
中将字典值作为 URLQueryItems
发送以另存为 message.url
?
PS:我想知道是否可以为 URL 创建一个扩展来存储字典,这就是我在 atm 上尝试失败的原因。
这是将字典转换为 URLQueryItems
:
的代码片段
let dictionary = [
"name": "Alice",
"age": "13"
]
func queryItems(dictionary: [String:String]) -> [URLQueryItem] {
return dictionary.map {
// Swift 3
// URLQueryItem(name: [=10=], value: )
// Swift 4
URLQueryItem(name: [=10=].0, value: [=10=].1)
}
}
var components = URLComponents()
components.queryItems = queryItems(dictionary: dictionary)
print(components.url!)
您可以使用以下 URLComponents
扩展名:
extension URLComponents{
var queryItemsDictionary : [String:Any]{
set (queryItemsDictionary){
self.queryItems = queryItemsDictionary.map {
URLQueryItem(name: [=10=], value: "\()")
}
}
get{
var params = [String: Any]()
return queryItems?.reduce([:], { (_, item) -> [String: Any] in
params[item.name] = item.value
return params
}) ?? [:]
}
}
}
并设置 url 个组件:
var url = URLComponents()
url.queryItemsDictionary = ["firstName" : "John",
"lastName" : "Appleseed"]
您可以使用 iMessageDataKit 库。它是 setting/getting Int
、Bool
、Float
、Double
、String
和 [=17] 的一个小而有用的 MSMessage
扩展=] 键的值。
它使设置和获取数据变得非常容易,例如:
let message: MSMessage = MSMessage()
message.md.set(value: 7, forKey: "user_id")
message.md.set(value: "john", forKey: "username")
message.md.set(values: ["joy", "smile"], forKey: "tags")
print(message.md.integer(forKey: "user_id")!)
print(message.md.string(forKey: "username")!)
print(message.md.values(forKey: "tags")!)
(免责声明:我是 iMessageDataKit
的作者)
所以我在摆弄 iMessages
框架,为了将数据发送给另一个用户,数据必须作为 URLComponents
URL
发送。但是我不知道如何发送字典以用作 messages.url
值。
func createMessage(data: dictionary) {
/*
The Dictionary has 3 values, 1 string and two arrays.
let dictionary = ["title" : "Title Of Dictionary", "Array1" : [String](), "Array2" : [String]() ] as [String : Any]
*/
let components = URLComponents()
let layout = MSMessageTemplateLayout()
layout.image = UIImage(named: "messages-layout.png")!
layout.imageTitle = "\(dictionary["title"])"
let message = MSMessage()
message.url = components.url!
message.layout = layout
self.activeConversation?.insert(message, completionHandler: { (error: Error?) in
print("Insert Message")
})
}
有谁知道如何在 URLComponents
中将字典值作为 URLQueryItems
发送以另存为 message.url
?
PS:我想知道是否可以为 URL 创建一个扩展来存储字典,这就是我在 atm 上尝试失败的原因。
这是将字典转换为 URLQueryItems
:
let dictionary = [
"name": "Alice",
"age": "13"
]
func queryItems(dictionary: [String:String]) -> [URLQueryItem] {
return dictionary.map {
// Swift 3
// URLQueryItem(name: [=10=], value: )
// Swift 4
URLQueryItem(name: [=10=].0, value: [=10=].1)
}
}
var components = URLComponents()
components.queryItems = queryItems(dictionary: dictionary)
print(components.url!)
您可以使用以下 URLComponents
扩展名:
extension URLComponents{
var queryItemsDictionary : [String:Any]{
set (queryItemsDictionary){
self.queryItems = queryItemsDictionary.map {
URLQueryItem(name: [=10=], value: "\()")
}
}
get{
var params = [String: Any]()
return queryItems?.reduce([:], { (_, item) -> [String: Any] in
params[item.name] = item.value
return params
}) ?? [:]
}
}
}
并设置 url 个组件:
var url = URLComponents()
url.queryItemsDictionary = ["firstName" : "John",
"lastName" : "Appleseed"]
您可以使用 iMessageDataKit 库。它是 setting/getting Int
、Bool
、Float
、Double
、String
和 [=17] 的一个小而有用的 MSMessage
扩展=] 键的值。
它使设置和获取数据变得非常容易,例如:
let message: MSMessage = MSMessage()
message.md.set(value: 7, forKey: "user_id")
message.md.set(value: "john", forKey: "username")
message.md.set(values: ["joy", "smile"], forKey: "tags")
print(message.md.integer(forKey: "user_id")!)
print(message.md.string(forKey: "username")!)
print(message.md.values(forKey: "tags")!)
(免责声明:我是 iMessageDataKit
的作者)