解决方法
Swift目前不支持查找全局功能.
对于C函数(Apple的框架中的大多数全局函数都是C函数),至少有两种方法:
如果可以找到符号,则动态检查(在运行时).
这是一个检查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.