ios – 检查Swift中是否存在全局函数

前端之家收集整理的这篇文章主要介绍了ios – 检查Swift中是否存在全局函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以检测是否定义了某些全局函数(非类方法)(在iOS中)?像课堂上的respondsToSelector …

解决方法

Swift目前不支持查找全局功能.

对于C函数(Apple的框架中的大多数全局函数都是C函数),至少有两种方法

>使用弱链接符号
>动态链接器API:dlopen

如果可以找到符号,则动态检查(在运行时).

这是一个检查UIGraphicsBeginImageContextWithOptions(iOS 4引入)是否可用的示例:

  1. void UIGraphicsBeginImageContextWithOptions(CGSize size,BOOL opaque,CGFloat scale) __attribute__((weak));
  2.  
  3. static inline BOOL hasUIGraphicsBeginImageContextWithOptions() {
  4. return UIGraphicsBeginImageContextWithOptions != NULL;
  5. }

这是使用dlsym的相同检查:

  1. #import <dlfcn.h>
  2.  
  3. static inline BOOL hasUIGraphicsBeginImageContextWithOptions() {
  4. return dlsym(RTLD_SELF,"UIGraphicsBeginImageContextWithOptions") != NULL;
  5. }

使用dlsym的优点是你不需要声明,并且它可以轻松移植到Swift.

猜你在找的iOS相关文章