【问题标题】:Unable to call specific Objective-C class method in Swift无法在 Swift 中调用特定的 Objective-C 类方法
【发布时间】:2014-09-17 19:44:32
【问题描述】:

我正在使用AFNetworking 2.3.1

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

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

'init()' is unavailable: superseded by import of -[NSObject init]

这一行在 Objective-C 上应该是这样的:

requestOperation.responseSerializer = [AFImageResponseSerializer serializer];

我认为这个问题与来自 Objective-C 的 Swift 自动桥接有关。有什么想法可以解决这个问题吗?

更新:

这种方式行不通:

AFImageResponseSerializer.serializer()

而且错误描述非常好:

'serializer()' is unavailable: use object construction 'AFHTTPResponseSerializer()'

更新 2:

现在我找到了一个临时解决方案。我将此代码添加到桥接头:

@interface AFImageResponseSerializer (CustomInit)
+ (instancetype)sharedSerializer;
@end

以及添加到“bridging-header”实现文件的代码:

@implementation AFImageResponseSerializer (CustomInit)
+ (instancetype)sharedSerializer {
    return [AFImageResponseSerializer serializer];
}
@end

并像这样使用它:

AFImageResponseSerializer.sharedSerializer()

【问题讨论】:

标签: ios objective-c swift


【解决方案1】:

这是由于在 XCode 6.1 中对基类的转换变得更加严格造成的。 因此,您需要向上转换,如下所示。

requestOperation.responseSerializer = AFImageResponseSerializer() as AFHTTPResponseSerializer

【讨论】:

  • 谢谢!您是如何发现这个解决方案的? :)
【解决方案2】:

如果是类方法,你可能想要AFImageResponseSerializer.serializer()

【讨论】:

  • 刚刚将更新添加到问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 2021-03-12
相关资源
最近更新 更多