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
我有一个非常简单的 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