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

使用Swift和Alamofire,我尝试使用append方法转换对象((dictionary:[String:AnyObject])中的单个json响应,但尝试时编译器未能抛出以下错误:

无法使用类型为(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]]
    ,输入Alamofire
    responseJSON
    时检查类型。对不起,vrwim,我如何检查类型?,我上面描述的json响应。在使用它的行前面放置一个断点,并在
    lldb
    中使用
    print
    查看它是什么类型以及它将转换为什么。检查您得到的
    json
    的类型。尝试将其转换为数组,看看会产生什么结果,然后尝试将第一个元素转换为字典,并尝试找出错误所在。