我可能在这里编译地狱。
我正在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推到极限之外。
答案 0 :(得分:1)
您需要确保将import
您的应用放在源文件的顶部以进行测试。例如,如果您的应用程序名为MyApp,请插入测试文件的顶部:
import MyApp
如果我遗漏import
,我会看到你所看到的相同行为。此外,只要import
存在,您就不必为单元测试而烦恼。[/ p>
答案 1 :(得分:1)
答案 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