在Objective-C文件中实例化Swift视图控制器

时间:2017-06-02 11:05:10

标签: objective-c swift3 properties

我的应用程序设置为在Swift和Obj-C之间交叉。 Define Module设置为yes,我已将-Swift.h文件导入到我正在处理的viewcontroller中。我现在试图从objective-c视图控制器呈现快速视图控制器。

以下是一些有效的代码,显示了快速视图控制器,背景颜色为红色:

 BulkProcessController* myBulkProcessController = [self.storyboard instantiateViewControllerWithIdentifier:@"bulkProcessController"];

 myBulkProcessController.view.backgroundColor = [UIColor redColor];

 [self presentChildViewController:myBulkProcessController];

但是,在swift视图控制器中,我有一个enum和var属性集:

class BulkProcessController: UIViewController {

    enum ProcessType {
        case AddContact
        case DeleteContact
    }

    var myProcessType: ProcessType = .AddContact

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

回到实例化部分。如果我将代码更改为:

BulkProcessController* myBulkProcessController = [self.storyboard instantiateViewControllerWithIdentifier:@"bulkProcessController"];

ProcessType thisProcessType = [[[notification userInfo] objectForKey:@"Process Type"] intValue];
myBulkProcessController.myProcessType = ADDCONTACTS;

myBulkProcessController.view.backgroundColor = [UIColor redColor];

[self presentChildViewController:myBulkProcessController];

该行:myBulkProcessController.myProcessType = ADDCONTACTS;抛出错误[注意:我知道ADDCONTACTS不是一个合适的值,它是AddContact,这是一个单独的问题]。错误是在BulkProcessController类型的对象上找不到myProcessType。

然而,如果我在实例化视图控制器后立即设置了断点,我可以在调试控制台中看到该属性:

enter image description here

这是属于哪里但属于Obj-C不可用的问题?我以为导入-Swift.h文件解决了这个问题。如果是这种情况,如何从Obj-C访问swift文件属性?或者我在Swift文件中做错了吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题是ProcessType无法在ObjC中表达(记住,它只支持整数支持的枚举)所以如果你真的不需要其他类型来支持你的枚举,你可以这样做:

@objc
enum ProcessType: Int {
    case AddContact
    case DeleteContact
}

旁注:请注意,按照惯例,Swift中的枚举案例以小写字母开头(可能是addContact& deleteContact - 甚至只是add& {{1会更合适)