无法在Swift中调用特定的Objective-C类方法

k06*_*06a 15 objective-c ios swift

我正在使用AFNetworking 2.3.1:

let request = NSURLRequest(URL: NSURL(string: "http://xxx.xxx.xxx/xxx")!)
var requestOperation = AFHTTPRequestOperation(request: request)
requestOperation.responseSerializer = AFImageResponseSerializer()
Run Code Online (Sandbox Code Playgroud)

我使用Swift 1.1(Xcode 6.1 beta 2 build 6A1030)在第三行出错:

'init()' is unavailable: superseded by import of -[NSObject init]
Run Code Online (Sandbox Code Playgroud)

这一行应该在Objective-C上看起来像这样:

requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
Run Code Online (Sandbox Code Playgroud)

我认为这个问题与Objective-C的Swift自动桥接有关.任何解决这个问题的想法?

在此输入图像描述

更新:

这种方式不起作用:

AFImageResponseSerializer.serializer()
Run Code Online (Sandbox Code Playgroud)

错误描述非常好:

'serializer()' is unavailable: use object construction 'AFHTTPResponseSerializer()'
Run Code Online (Sandbox Code Playgroud)

更新2:

现在我找到了暂时的解决方案.我将此代码添加到桥接标头:

@interface AFImageResponseSerializer (CustomInit)
+ (instancetype)sharedSerializer;
@end
Run Code Online (Sandbox Code Playgroud)

并将代码添加到"bridging-header"实现文件中:

@implementation AFImageResponseSerializer (CustomInit)
+ (instancetype)sharedSerializer {
    return [AFImageResponseSerializer serializer];
}
@end
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

AFImageResponseSerializer.sharedSerializer()
Run Code Online (Sandbox Code Playgroud)

小智 16

它是由于在XCode 6.1中转换为基类变得更加严格.所以,你需要upcasting,如下所示.

requestOperation.responseSerializer = AFImageResponseSerializer() as AFHTTPResponseSerializer
Run Code Online (Sandbox Code Playgroud)