将代码限制为 Objective-C 或 Swift 调用者



我正在转换一些遗留的Objective-C,我遇到了一个奇怪的问题。有问题的代码是 Objective-C 中定义的协议,但代码的调用者是 Swift 和 Objective-C 的混合包。

我很好奇是否有办法通过弃用警告将调用者限制为仅 Swift 或仅 Objective-C。我正在考虑保留 Objective-C 协议,并在单独的 Swift 协议中添加相同的协议方法,最终目标是在我完成将所有 Obj-C 转换为 Swift 后对 Obj-C 进行核弹。

我想通了。有问题的协议有错误处理,这在 Objective-C 和 Swift 之间是不同的。虽然我无法发布特定的代码,但从高层次来看,我做了以下工作:

启动 Objective-C 协议

@protocol MyObjCProtocol

Objective-C Protocol (更新(

Obj-C协议声明中混合了符合它的Objective-C和Swift对象。这让编译器有些奇怪。我最终做的是在 Xcode for Swift 5.0 中生成标头,并将其复制到新的仅限 Swift 的协议声明中。

NS_SWIFT_UNAVAILABLE("Conform to MySwiftProtocol for Swift classes")
@protocol MyObjCProtocol

Swift 协议(新(

@available(swift, introduced: 4.0)
public protocol MySwiftProtocol { // all the methods }

最新更新