我是Swift的新手,我知道我在这里遇到的问题是由于完全不了解在类之间传输数据是如何工作的。
我有一个Swift类,其isRecording bool最初设置为false。当我在应用程序上按“录制”按钮时,isRecording设置为true。
我想在目标C类中使用isRecording。我可以访问该变量,并且可以将其打印出来。问题是,在swift类中将isRecording设置为true时,在目标c类中仍为false。按下按钮后如何获取isRecording更新。
快速班:
class SessionHandler : NSObject, AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureMetadataOutputObjectsDelegate {
@objc public var isRecording = false
目标C类
#import "DlibTester-Swift.h"
SessionHandler *session = [[SessionHandler alloc]init];
//....
cout << "isRecording is " << session.isRecording << endl;
答案 0 :(得分:1)
您似乎正在尝试分配SessionHandler的新实例,而不是请求在Swift中分配的已经分配的SessionHandler实例。
查找在Swift中声明并实例化SessionHandler的位置,并确保您具有@objc可访问函数或变量以从Objective-C访问它。无论您做什么,都不要从Objective-C创建新的SessionHander实例,否则请确保它们不会是相同的值。
编辑:单例...
如果可以保证整个项目中只有一个SessionHandler,则可能需要研究如何定义和使用Singleton。这样就可以从Objective-C进行[SessionHandler sharedHandler] .isRecording,并将其用作Swift中的SessionHandler.sharedHandler。参考:https://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift/