我的应用程序设置为在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。
然而,如果我在实例化视图控制器后立即设置了断点,我可以在调试控制台中看到该属性:
这是属于哪里但属于Obj-C不可用的问题?我以为导入-Swift.h文件解决了这个问题。如果是这种情况,如何从Obj-C访问swift文件属性?或者我在Swift文件中做错了吗?
任何帮助将不胜感激。
答案 0 :(得分:1)
问题是ProcessType
无法在ObjC中表达(记住,它只支持整数支持的枚举)所以如果你真的不需要其他类型来支持你的枚举,你可以这样做:
@objc
enum ProcessType: Int {
case AddContact
case DeleteContact
}
旁注:请注意,按照惯例,Swift中的枚举案例以小写字母开头(可能是addContact
& deleteContact
- 甚至只是add
& {{1会更合适)