Json 无法调用类型为';对象';迅速地
使用Swift和Alamofire,我尝试使用append方法转换对象((dictionary:[String:AnyObject])中的单个json响应,但尝试时编译器未能抛出以下错误:Json 无法调用类型为';对象';迅速地,json,swift,alamofire,Json,Swift,Alamofire,使用Swift和Alamofire,我尝试使用append方法转换对象((dictionary:[String:AnyObject])中的单个json响应,但尝试时编译器未能抛出以下错误: 无法使用类型为(dictionary:(String:AnyObject))的参数列表调用类型“Object”的初始值设定项。 有什么办法可以解决吗 重要信息,getById函数的返回值必须是[Object] json响应 可选([“名称”:object1,_id”:5470def9e0c0be2778012
无法使用类型为(dictionary:(String:AnyObject))的参数列表调用类型“Object”的初始值设定项。
有什么办法可以解决吗
重要信息,getById函数的返回值必须是[Object]
json响应
可选([“名称”:object1,_id”:5470def9e0c0be27780120d8,
“imageUrl”:https://s3-eu-west-1.amazonaws.com/api-static/objects/5470def9e0c0b_180.png,
“地点”:{
城市=马德里;
国家=西班牙;
},
“描述”:等等。
])
类对象{
变量id:String!
变量名称:字符串!
var-imageUrl:String!
变量位置:[字符串:字符串]!
init(字典:[字符串:AnyObject]){
id=字典[“_id”]作为?字符串
名称=字典[“名称”]作为?字符串
imageUrl=字典[“imageUrl”]作为?字符串
位置=字典[“位置”]作为?[字符串:字符串]
}
}
func getById(completionHandler:([Object]?,NSError?)->()){
请求(Router.GetById(“5470def9e0c0be2778012d7”)).responseJSON{(请求,响应,json,错误)在
var object=[object]()
var jsonObj=json as?[String:AnyObject]
对于jsonObj中的字典{
追加(对象(字典:字典))
}
completionHandler(对象,无)
}否则{
completionHandler(无,错误)
}
}
}
由于jsonObj
的类型为[String:AnyObject]
,当您尝试对其进行迭代时,字典的类型为(String,AnyObject)
,表示一个键和字典的值。这就是为什么Swift不能实例化您的对象
,因为它需要字典
,而不是元组
您应该将您的jsonObj
实例化为[[String:AnyObject]]
一些额外的评论:
适当地命名变量,object
听起来像是单个对象,但实际上是一个对象数组。将其更改为类似于objects:[Object]
您可以选择在var jsonObj=json中向下转换为?[String:AnyObject]
,然后强制展开此变量。或者使用as强制施放它
或使用if let
语句捕获任何nil
值
使用map
包装初始化器,而不是在数组的值上循环
因此,您的代码变成:
func getById(completionHandler: ([Object]?, NSError?) -> ()) {
Alamofire.request(Router.GetById("5470def9e0c0be27780121d7")).responseJSON { (request, response, json, error) in
if let objects = json as? [[String: AnyObject]] {
completionHandler(object.map {Object(dictionary: $0)}, nil)
return
}
completionHandler(nil, error)
}
(或者类似的事情,我不知道还有其他人在做什么)谢谢vrwim,现在将jsonObj实例化为[[String:AnyObject]]
应用程序编译正常,但是println(“jsonObj\(jsonObj)”)
为零。这意味着你没有得到[[String:AnyObject]]
,输入AlamofireresponseJSON
时检查类型。对不起,vrwim,我如何检查类型?,我上面描述的json响应。在使用它的行前面放置一个断点,并在lldb
中使用print
查看它是什么类型以及它将转换为什么。检查您得到的json
的类型。尝试将其转换为数组,看看会产生什么结果,然后尝试将第一个元素转换为字典,并尝试找出错误所在。