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

标签 objective-c swift xcode10 objective-c-category

我有一个非常简单的 Swift objc 类,我想从中调用在 Objective-C 中定义的类的类别中定义的方法。

然而,编译器并不高兴:

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

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

这是文件 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 中

@interface MyServer : NSObject
    - (MyServer *) init;
    // and a ton of stuff omitted
@end

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

这是 Xcode 10.1。

什么给了? 谢谢

最佳答案

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

关于objective-c - Swift 代码看不到在 Objective-C 类别中声明的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364529/

相关文章:

ios - IBMMobileFirstPlatformFoundation 中的 ld : library not found for -lstdc++. 6

ios - Objective-C 索引数组

iphone - 升级到 IOS5 - 应用程序无法构建

iphone - 为什么我的 Sprite 在第一次移动后会转到错误的坐标?

swift - 设置 Firestore 文档时如何检测网络连接缺失

ios - 缺少配置文件 :Apps must contain a provisioning profile in a file named embedded. mobileprovision

ios - validateFunctionArguments :3379: failed assertion `Fragment Function , 纹理的像素格式(MTLPixelFormatRGBA16Unorm)

ios - 在 Swift 中更新 View

ios - NSAttributedString 不适用于 UILabel

ios - 添加类 UITest 目标时出错