You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:54:03