gpt4 book ai didi

objective-c - 在 Swift 协议(protocol)中使用 ObjC block

转载 作者:行者123 更新时间:2023-11-28 14:41:32 26 4
gpt4 key购买 nike

我正在尝试将代码从 Objective-C 转换为 Swift。不可能全部转换,因为该项目使用 C++,因此也使用 Objective-C++,但至少使用的协议(protocol)应该用 Swift 编写。

因此,在尝试将 block 转换为属性时,我遇到了一些问题。

我的 Objective-C 协议(protocol):

@protocol ObjcProtocol<NSObject>

@property (nullable, nonatomic, copy, readwrite) dispatch_block_t callback;

@end

我的 Swift 协议(protocol):

@objc public protocol SwiftProtocol: NSObjectProtocol {
var callback: ()->() { get set }
}

尝试在 Objective-C 中设置此属性时出现此错误:

“在‘NSObject *’类型的对象上找不到属性‘回调’”

创建的 Swift 头文件包含以下内容:

@property (nonatomic, copy) void (^ _Nonnull callback)(void);

我也偶然发现了@convention(block)。直接在 var 中声明它是行不通的,因为我收到一条错误消息,声称它只能用作函数类型。所以我尝试使用类型别名:

public typealias callBackType = (@convention(block) () -> ())

这再次导致找不到该属性。

我尝试过但没有成功的其他方法是使用 @objc 显式注释该属性。

将回调函数类型设置为可选也没有改变任何东西。

此外,我尝试创建一个包含回调的 Objective-C 协议(protocol),并使 SwiftProtocol 依赖于新创建的协议(protocol)。同样的结果...

我错过了什么?

最佳答案

好吧.. 所以即使 Xcode 可以自动完成代码,但这并不意味着文件中的所有内容都已正确导入。为了解决以上问题,我添加了 @import <ModuleName.Swift>;并且有效

关于objective-c - 在 Swift 协议(protocol)中使用 ObjC block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com