ios - 如何避免共享库中的函数重定义?

标签 ios objective-c xcode

我正在用 Objective-C 编写一个开源 iOS 库,我最终打算上传到 github。我的库依赖并定义了某些功能,例如...

CGFloat DegreesToRadians(CGFloat degrees);
UIColor RGB(int r, int g, int b);

这一切都很好,但是当有人将我的库添加到他们的项目中时,如果他们也定义了 DegreesToRadiansRGB函数,或者他们正在使用另一个定义它们的库,那么将有一个 Redfinition of DegreesToRadians编译错误。

无论如何我是否能够组织我的函数的定义,使用适当的关键字,以某种方式使用#ifndef,移动#import语句或任何其他解决方案,以便这些函数仅在我的库内部有效地存在并且不会暴露在外部,因此不会引起冲突吗?

注意事项:
  • 我不想给我的函数加上前缀,因为它们在内部被广泛使用,并且会破坏我的代码的语义和可读性。
  • 我知道我可以在使用它们的类中定义函数“静态”和 with-,但这些函数在许多类中使用,因此这种方法会违反 DRY 原则。
  • 在理想情况下,用户不想修改我的库代码以避免此错误,因此让用户只注释掉我的库代码或其他潜在冲突库代码中的定义是 Not Acceptable 。
  • 最佳答案

    最简单的方法是将这些函数定义包含在私有(private)头文件中。

    添加 .h它们在库配置的“私有(private) header ”部分中定义。然后,使用您的库的用户将看不到它们。

    如果你想暴露它们,但仍然担心冲突,你为什么不把它们移到类里面呢?我知道它们是不同的函数,但是您可以将它们作为对象的函数移动到类中,例如

    MyConverter
    - (CGFloat)radiansFromDegrees:(CGFloat)degrees;
    

    然后,用户可以根据需要使用您的类来做同样的事情,或者如果他们想更改功能,可以扩展功能。您的库仍将使用您创建的类,因此不应有交叉线。

    关于ios - 如何避免共享库中的函数重定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17720049/

    相关文章:

    ios - 在 iOS 键盘上方附加自定义警报 View

    ios - 不同单词的正则表达式(不嵌入其他单词)

    ios - NSUserDefaults 机会 UISwitch 值

    xcode - Xcode 中已存在同名项目

    xcode - 如何在 ScrollView 中使用自动布局?

    iphone - 没有工具栏或导航栏的 UiBarButtonItem

    ios - 接收者没有标识符“***”的segue

    objective-c - 从 iPhone 设置获取邮件

    objective-c - Xcode 验证错误 : non-public selectors

    ios - 为用户创建邮件帐户