【问题标题】:How to access a swift file from an objective file, while both of them are in Unit Test?如何从目标文件访问 swift 文件,而它们都在单元测试中?
【发布时间】:2019-11-13 13:13:10
【问题描述】:
这个问题可能仍然让很多人感到困惑,但是这个问题还没有答案。
我有 2 个文件,都在 Unit Test 目录中。
1. NSError 的快速扩展。让我们称之为 NSErrorExtension.swift。此扩展包含一些静态方法。
2. 一个客观的 C 测试类,我们称之为 UnitTest1.m 。
现在,我想从 UnitTest1.m 访问 NSErrorExtension.swift 中的静态方法。我该怎么做呢?它只是告诉我“没有已知的选择器类方法......”我尝试了很多解决方案,但没有一个有效。
【问题讨论】:
标签:
objective-c
swift
xcode
unit-testing
【解决方案1】:
遇到同样的问题,MyAppTests-Swift.h 似乎不是很“可导入”:)
我不得不求助于一些不太好的解决方法来完成这项工作。对于类实例化,我使用了NSClassFromString(),然后转换为在 Objective-C 端可见的协议。对于您的扩展,您可以通过在头文件中声明方法来执行类似的操作,而无需实际实现它们。
所以假设你的 NSErrorExtension.swift 扩展看起来像这样:
extension NSError {
@objc func someFunc() -> SomeResult
}
,你可以创建一个NSErrorExtension.h文件(没有对应的.m一个):
@interface NSError (UnitTestExtensions)
- (SomeResult *)someFunc;
@end
这应该使该函数在 Objective-C 端可用。不利的一面是,您需要为要从单元测试的 Swift 端公开的每个函数执行此操作。