![](/img/trans.png)
[英]Alamofire Parameters - NSDictionary is not convertible to [String : AnyObject]
[英]Create complex [String:AnyObject] for Alamofire parameters
这是我与Swift合作的第一个项目,请耐心等待。 我正在尝试使用Alamofire集成我的REST服务。 在复杂的JSON结构的情况下,构建参数字段会遇到一些麻烦。
服务器需要这样的结构:
{
"event": {
"name": "string",
"duration": 1,
"lat": 45.0,
"lon": 45.0,
"deadline": "2015-12-01T10:07:14.017Z"
},
"proposals": [
"2015-11-01T10:07:14.017Z"
],
"invitations": [
{
"user": 0,
"phone": "string",
"email": "string"
}
]
}
建议是NSDate数组,邀请是Dictionary数组,长度都是可变的。
目前,我正在尝试创建一个NSMutableDictionary
,用必要的字段填充它,最后将其转换为[String: AnyObject]
这是事件和投标字段的示例:
var parameters: [String:AnyObject] = [
"event" : "",
"proposals": "",
"invitations": "",
]
if let event = mutableParameters.objectForKey("event") as? [String:AnyObject] {
parameters.updateValue(event, forKey: "event")
}
if let prop = mutableParameters.objectForKey("proposals") as? [String:AnyObject] {
parameters.updateValue(prop, forKey: "proposals")
}
但是第二个if不会进入true分支。
有什么建议么? 如果有人有更好的解决方案,这将是公认的!
错误是您将mutableParameters.objectForKey("proposals")
为[String:AnyObject]
字典,但这应该是[String]
,它是一个字符串数组:
if let prop = mutableParameters.objectForKey("proposals") as? [String] {
parameters.updateValue(prop, forKey: "proposals")
}
更新
最好只制作一个Swift字典并使用NSJSONSerialization
:
let source: [String:AnyObject] = ["event" : ["name": "welcome", "duration": "1", "lat": 45.0,"lon": 45.0,"deadline": "2015-12-01T10:07:14.017Z"], "proposals": ["2015-12-01T10:07:14.017Z"], "invitations": [["user": "eric", "phone": "555", "email": "none"]]]
do {
let dictionaryAsJSONData = try NSJSONSerialization.dataWithJSONObject(source, options: [])
// send it to your server, or...
if let jsonDataAsString = NSString(data: dictionaryAsJSONData, encoding: NSUTF8StringEncoding) {
// send this
print(jsonDataAsString)
}
} catch {
print(error)
}
这里jsonDataAsString
是:
{“ proposals”:[“ 2015-12-01T10:07:14.017Z”],“ invitations”:[{“ email”:“ none”,“ user”:“ eric”,“ phone”:“ 555”} ],“ event”:{“ lon”:45,“ deadline”:“ 2015-12-01T10:07:14.017Z”,“ duration”:“ 1”,“ lat”:45,“ name”:“ welcome “}}
您可以使用SwiftyJSON轻松实现此目标
通过Cocoapods或手动安装。 对于手动,您只需在工作区中下载SwiftyJSON.xcodeproj文件并将其添加。
在构建阶段为iOS添加SwiftyJSON框架
现在只需将其导入您的ViewController
import SwiftyJSON
即使在导入后,如果Xcode无法识别它,请清理并构建它。
码
let dic1 = ["name": "string", "duration": "1", "lat": 45.0,"lon": 45.0,"deadline": "2015-12-01T10:07:14.017Z"]
let dic2 = ["2015-12-01T10:07:14.017Z"]
let dic3 = [["user": "string", "phone": "1", "email": "asd"]]
let response = [ "event" : dic1,"proposals": dic2,"invitations": dic3]
print(JSON(response))
输出量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.