如何在Objective-C中检测CGColor类型,适配React Native不同版本borderColor差异
解决方案
Objective-C 中 Core Foundation 类型不支持 isKindOfClass 方法,你可以通过 Core Foundation 提供的类型标识判断能力实现兼容逻辑,所有 CF 类型都有唯一的类型 ID,CGColorRef 对应的 ID 可以通过 CGColorGetTypeID() 获取。
实现代码
CFTypeRef rawBorderColor = (__bridge CFTypeRef)rctView.borderColor; if (CFGetTypeID(rawBorderColor) == CGColorGetTypeID()) { // 旧版本RN返回CGColorRef,转换为UIColor后赋值 _borderColor = [UIColor colorWithCGColor:(CGColorRef)rawBorderColor]; } else { // 新版本RN返回UIColor,直接赋值 _borderColor = (__bridge UIColor *)rawBorderColor; }
说明
- 代码中使用
__bridge做类型转换是ARC环境下的标准写法,仅做类型映射不改变内存所有权 - 先判断CF类型ID的逻辑可以完全避免对非OC对象调用OC方法的崩溃问题,兼容所有RN版本
- 如果需要更高的严谨性,可以在else分支中增加
isKindOfClass判断确认是UIColor类型后再赋值
内容的提问来源于stack exchange,提问作者luke
相关产品推荐
相关产品推荐

