重命名方法名 - ShenYj/ShenYj.github.io GitHub Wiki

重命名方法名

OC方法暴露给Swift

NS_SWIFT_NAME

  • NS_SWIFT_NAME 重新命名在swift中的名称

    通过 NS_SWIFT_NAME 来将 Object-C 方法在 Swift 下重名命名

    e.g.

    + (void)testStaticFunc NS_SWIFT_NAME(ocTestStaticFunc());
    

    在 Swift 中使用

    OCClass.ocTestStaticFunc()

NS_REFINED_FOR_SWIFT

除了使用 NS_SWIFT_NAME, 还有一种方式: NS_REFINED_FOR_SWIFT

.apinotes

使用 NS_SWIFT_NAMENS_REFINED_FOR_SWIFT 都是在源码基础上针对一个个方法来修改的,对于一个早期纯 Object-C 版本的 SDK 项目,想要批量去优化命名来适配 Swift的话, 苹果还提供了一种方式

在作为 SDK 开发时,可以在 SDK 目录内创建 .apinotes文件 (YAML文件) 来统一进行配置,此方法不仅限于修改方法名称

objc 源码的 Public Header 下就存有这个文件

Swift方法暴露给OC

  • @objc 重新命名在 objective-c 中的名称

    e.g.

    @objc(swiftInstanceMethod)
    public func innstanceMethod() {
        print("\(#function)")
    }

    OC 中使用

    [[SwiftClass new] swiftInstanceMethod];
    

    可以学习下 FloatingPanel 这个开源库

⚠️ **GitHub.com Fallback** ⚠️