我今天遇到了一条非常有趣的错误消息:
无法使用类型'(AnyObject)'
的参数列表调用'map'
我甚至不知道Swift中有一个类型叫(AnyObject)!
上下文是,我在http请求之后使用闭包作为回调:
dataHandler: ((AnyObject) -> ())?,
并尝试在这段代码中实现dataHandler:
dataHandler: { (obj: AnyObject) -> () in ...}
此时,迅速将“obj”作为类型:( Anyobject)......
感谢@ sketchyTech的鼓舞人心的回答,ObjectMapper似乎需要具体类型的“AnyObject”,就像将其转换为Array或Dictionary。现在我的代码工作了:
if let dic = res as? [String: AnyObject], res = Mapper<MappableType>().map(dic) {
...
}
答案 0 :(得分:2)
当用作具体类型而不是泛型类型时,AnyObject
使您可以调用任何ObjC方法(但当然它必须能够在运行时响应该方法以避免崩溃)。
当用作具体类型时,所有已知的
@objc
方法和 属性可用,作为隐式展开的可选方法 和AnyObject
的每个实例上的属性。 (Swift头文件)
它的主要作用是帮助在ObjC和Swift的强类型语言之间传递对象。
对于要与更高阶Swift函数一起使用的类型AnyObject
的实例,必须首先将其强制转换为可应用它们的类型,例如
dataHandler: {arr in
if let a = arr as? [Int] {
a.map{$0+1}
}}