所以我正在使用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")
})
}
有人知道如何将URLQueryItems
中的字典值发送为URLComponents
以保存为message.url
吗?
PS:我想知道是否可以为URL存储字典的扩展名,这就是我尝试atm失败的原因。
答案 0 :(得分:9)
以下是将字典转换为URLQueryItems
的代码段:
let dictionary = [
"name": "Alice",
"age": "13"
]
func queryItems(dictionary: [String:String]) -> [URLQueryItem] {
return dictionary.map {
// Swift 3
// URLQueryItem(name: $0, value: $1)
// Swift 4
URLQueryItem(name: $0.0, value: $0.1)
}
}
var components = URLComponents()
components.queryItems = queryItems(dictionary: dictionary)
print(components.url!)
答案 1 :(得分:1)
您可以使用以下Drawpage
扩展程序:
URLComponents
并设置网址组件:
extension URLComponents{
var queryItemsDictionary : [String:Any]{
set (queryItemsDictionary){
self.queryItems = queryItemsDictionary.map {
URLQueryItem(name: $0, value: "\($1)")
}
}
get{
var params = [String: Any]()
return queryItems?.reduce([:], { (_, item) -> [String: Any] in
params[item.name] = item.value
return params
}) ?? [:]
}
}
}
答案 2 :(得分:0)
您可以使用iMessageDataKit库。这是设置/获取MSMessage
,Int
,Bool
,Float
,Double
和String
的微小且有用的Array
扩展程序键的值。
它使得设置和获取数据非常简单:
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
的作者)