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

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

解决方法

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

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

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

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

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

void UIGraphicsBeginImageContextWithOptions(CGSize size,BOOL opaque,CGFloat scale) __attribute__((weak));

static inline BOOL hasUIGraphicsBeginImageContextWithOptions() {
    return UIGraphicsBeginImageContextWithOptions != NULL;
}

这是使用dlsym的相同检查:

#import <dlfcn.h>

static inline BOOL hasUIGraphicsBeginImageContextWithOptions() {
    return dlsym(RTLD_SELF,"UIGraphicsBeginImageContextWithOptions") != NULL;
}

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

猜你在找的iOS相关文章