swift:什么类型的“(AnyObject)”?

时间:2016-04-06 12:14:30

标签: swift

我今天遇到了一条非常有趣的错误消息:

  

无法使用类型'(AnyObject)'

的参数列表调用'map'

我甚至不知道Swift中有一个类型叫(A​​nyObject)!

上下文是,我在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) {
        ...
    }

1 个答案:

答案 0 :(得分:2)

当用作具体类型而不是泛型类型时,AnyObject使您可以调用任何ObjC方法(但当然它必须能够在运行时响应该方法以避免崩溃)。

  

当用作具体类型时,所有已知的@objc方法和   属性可用,作为隐式展开的可选方法   和AnyObject的每个实例上的属性。 (Swift头文件)

它的主要作用是帮助在ObjC和Swift的强类型语言之间传递对象。

对于要与更高阶Swift函数一起使用的类型AnyObject的实例,必须首先将其强制转换为可应用它们的类型,例如

dataHandler: {arr in
    if let a = arr as? [Int] {
        a.map{$0+1}
    }}