如何在Swift View Controller中访问私有目标C变量?

时间:2018-03-31 23:02:06

标签: ios objective-c swift

我几乎没有关于Objective-C的知识。我正在使用一个用于AVCaptureSession的Obj-C框架。我需要访问摄像机会话的AVCaptureVideoDataOutput。

在.m文件中初始化并设置会话。

@property (nonatomic, strong) AVCaptureSession *session;

我无法将属性从.m移动到.h文件,因为.m文件需要它来设置所有函数。

我也尝试在.m和.h中分别对它们进行readwrite / readonly以避免重新声明问题,但是当我在启动摄像机后调用camera.session时,“session”返回nil并且应用程序崩溃。

我不知道将所有代码移动到.h文件中是否会出现任何问题,因此它们都可公开访问?

如何从View Controller中的.m文件访问会话属性?

2 个答案:

答案 0 :(得分:2)

将财产移至.h。公开公开并将其提供给.m,因为.m文件默认导入.h。 例如:

// CameraViewController.h
@interface CameraViewController : UIViewController
@property (nonatomic, strong) AVCaptureSession *session;
@end 

// CameraViewController.m
#import "CameraViewController.h" // <- notice the import, `session` is accessible internally.

至于session属性为nil,可能是因为你还没有用值初始化它。在init中,您可能希望使用session

初始化[[AVCaptureSession alloc] init]

注意:为了避免意外可变性的潜在问题,我建议您自问是否可以公开曝光的属性只读。

@property (nonatomic, strong, readonly) AVCaptureSession *session;

答案 1 :(得分:1)

如果将它移动到.h,.m也可以访问它。您甚至可以在标题中将其设置为只读,并在m

中进行读写

所以要么:

·H:

@property (nonatomic, strong) AVCaptureSession *session;

或者:

·H:

@property (nonatomic, strong, readonly) AVCaptureSession *session;

的.m:

@property (nonatomic, strong, readwrite) AVCaptureSession *session;