我试图将代码从Objective-C转换为Swift。它不可能转换所有它,因为该项目使用C ++,因此也使用Objective-C ++,但至少使用的协议应该用Swift编写。
因此,在尝试使用块作为属性进行转换时,我偶然发现了问题。
我的Objective-C协议:
@protocol ObjcProtocol<NSObject>
@property (nullable, nonatomic, copy, readwrite) dispatch_block_t callback;
@end
My Swift协议:
@objc public protocol SwiftProtocol: NSObjectProtocol {
var callback: ()->() { get set }
}
尝试在Objective-C中设置此属性我收到此错误:
&#34;财产&#39;回调&#39;在&#39; NSObject *&#39;&#34;
类型的对象上找不到创建的Swift头文件包含:
@property (nonatomic, copy) void (^ _Nonnull callback)(void);
我也偶然发现@convention(block)
。直接在var中声明它并不起作用,因为我得到一个错误声称它只能用作函数类型。所以我尝试过使用typealias:
public typealias callBackType = (@convention(block) () -> ())
再次导致财产无法找到。
我尝试了但没有成功的其他事情,是用@objc
明确注释了该属性。
将回调函数类型设置为optional也不会改变任何内容。
此外,我尝试创建包含回调的Objective-C协议,并使SwiftProtocol依赖于新创建的协议。同样的结果......
我错过了什么?
答案 0 :(得分:1)
好的..所以事实证明,即使Xcode可以自动完成代码,但并不意味着,一切都在文件中正确导入。为了解决上述问题,我添加了@import <ModuleName.Swift>;
并且可以正常使用