Swift 代码看不到 Objective-C 类别中声明的方法

Swift code cannot see method declared in Objective-C category

我有一个非常简单的 Swift objc class,我想从中调用在 class 中定义的类别中定义的方法39=].

然而,编译器并不高兴:

.../UploadOperation.swift:25:24: error: value of type 'MyServer' has no member 'clearPendingData'
        self.server?.clearPendingData();

当我将 clearPendingData 的声明移动到主 class 声明时,编译器很高兴(除了我现在在我的 Objective-C 代码中收到关于主 class vs 类别方法实现)。

这是文件 UploadOperation.swift

中的 Swift 声明
@objc class UploadOperation: Operation {

    @objc var server: MyServer? = nil

    override init() {
        super.init()
        self.completionBlock = { [unowned self] () in
            self.server?.clearPendingData()
        }
    }
}

这是类别,在文件 MyServer+upload.h:

#import "MyServer.h"

@class UploadOperation;

@interface MyServer (upload)
    - (void) clearPendingData;
@end

以及文件 MyServer.h

中的主要 class 声明
@interface MyServer : NSObject
    - (MyServer *) init;
    // and a ton of stuff omitted
@end

(当然省略了很多不相关的代码)

这是 Xcode 10.1.

什么给了? 谢谢

如果您希望从类别中定义的 Swift 访问 Objective-C 方法,您必须包括类别 header 以及 class header在你的桥接文件中。在这种情况下,包括 MyServer+upload.h 以及 MyServer.h。您的错误表明您还没有这样做。 HTH