React Native新架构下.mm调用Swift类遇AVCapturePhotoCaptureDelegate错误
解决Objective-C++(.mm)调用Swift类时的「No type or protocol named 'AVCapturePhotoCaptureDelegate'」错误
针对React Native新架构下必须使用.mm文件的场景,以下是具体解决步骤:
1. 确保Swift桥接头文件导入AVFoundation
打开项目的Swift桥接头文件(命名格式通常为[项目名]-Bridging-Header.h),添加AVFoundation的导入:
#import <AVFoundation/AVFoundation.h>
2. 在.mm文件中显式导入依赖
直接在RTNMyCamera.mm顶部添加以下导入语句,不要依赖PrefixHeader.pch的全局导入:
#import <AVFoundation/AVFoundation.h> #import "你的项目名-Swift.h"
注意:
你的项目名-Swift.h是Xcode自动生成的文件,名称必须与项目的Product Name完全一致,区分大小写。
3. 检查Swift类的暴露修饰符
确保你的MyCamera类及相关方法符合Objective-C兼容要求:
@objc class MyCamera: NSObject, AVCapturePhotoCaptureDelegate, AVCaptureVideoDataOutputSampleBufferDelegate { // 需要在Objective-C中调用的方法必须添加@objc修饰 @objc func startCapture() { // 业务逻辑 } // 协议方法无需额外加@objc(AVCapture系列协议本身是Objective-C协议) func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { // 协议实现逻辑 } }
- 必须继承
NSObject,确保Swift类具有Objective-C兼容性 - 类前添加
@objc修饰,让Xcode将其暴露给Objective-C++
4. 清理缓存并重新构建
缓存问题可能导致自动生成的桥接文件未更新,执行以下操作:
- 关闭Xcode
- 删除DerivedData文件夹(路径可通过Xcode偏好设置 → Locations 查看)
- 重新打开项目,按下
Cmd+Shift+K清理构建文件夹,再按Cmd+B重新构建
5. 检查项目Build Settings配置
确认以下配置项正确:
- Swift Compiler - General →
Objective-C Bridging Header:填写正确的桥接头文件路径(如$(SRCROOT)/项目名/项目名-Bridging-Header.h) - Swift Compiler - General →
Install Objective-C Compatibility Header:设置为YES - Apple Clang - Language Modules →
Enable Modules (C and Objective-C):设置为YES
内容的提问来源于stack exchange,提问作者BraveEvidence
相关产品推荐
相关产品推荐

