Swift测试无法在Objective-C VC上找到Swift类属性

时间:2017-09-08 17:57:22

标签: ios objective-c swift xcode

我可能在这里编译地狱。

我正在Swift中实现一个Snapshot测试,在Objective-C VC上调用一个属性,但该属性是一个用Swift编写的类,桥接进来。

MyViewController.h

@class TextEntryView;

@interface MyViewController: AbstractTextEntryViewController

@property (nonatomic, strong) TextEntryView *textEntryView;

@end

TextEntryView.swift

@objc(TextEntryView) class TextEntryView: UIView

在我的测试中,我正试着打电话

vc.textEntryView其中vc的类型为MyViewController,我收到错误:

  

MyViewController类型的值没有成员textEntryView

我的桥接标题看起来不错。 如果我在上面的.h文件中添加NSString属性,我可以在测试中引用它。此外,当我命令时 - 点击MyViewController在我的测试中,它将我带到.h文件而不是.swift生成的该文件版本(这似乎是此问题的症状)

我可能会将Xcode 8推到极限之外。

3 个答案:

答案 0 :(得分:1)

您需要确保将import您的应用放在源文件的顶部以进行测试。例如,如果您的应用程序名为MyApp,请插入测试文件的顶部:

import MyApp

如果我遗漏import,我会看到你所看到的相同行为。此外,只要import存在,您就不必为单元测试而烦恼。[/ p>

答案 1 :(得分:1)

您是否尝试导入测试目标?

enter image description here

答案 2 :(得分:1)

由于您已经将Swift代码的Xcode生成的头文件导入Objective-C .m文件。

还请从TextEntryView类中删除@objc注释,因为它是UIView的子类,因此可在Objective-C中访问和使用。保留注释@objc可能会导致副作用。

  

要在Objective-C中可访问和使用,Swift类必须是a   Objective-C类的后代,或者必须标记为@objc。

一个简单的"副作用"是一个(快速)UIViewController子类被标记为@objc并在storyBoard中用作自定义子类:

instantiateViewControllerWithIdentifier将实例化UViewController而不是我们在storyBoard中设置的子类。 错误Unknown class _TtC10AbcdViewController in Interface Builder file