我在.mat
中创建了一个小型测试框架。我的目的是在savemat
类中使用Swift
类。我创建了一个Swift
文件。然后是一个Objective-C
文件。我确保 Build Settings 中的Swift
标头是 Test-Swift.h
尝试在目标C文件中导入Test-Swift.h时,出现错误-
找不到“ Test-Swift.h”文件。
快速班:
Objective-C
Objective-C类:
Objective-C
框架标题:
import Foundation
@objc class MyTest: NSObject {
func addTest() {
print("test")
}
}
构建设置(objective-C标头):
我已将定义模块设置为是
答案 0 :(得分:1)
在框架目标中导入Swift代码的语法是
#import <ProductName/ProductModuleName-Swift.h>
在您的情况下可能是
#import <Test/Test-Swift.h>
此行实际上出现在您的示例中,并且编译器显然没有抱怨它。参见https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c。
另一个问题是,鉴于Swift声明,您将无法以尝试的方式使用Swift类。根据以上参考,Swift声明将需要具有public
或open
访问修饰符,才能通过-Swift.h
接口头显示。您还需要使addTest()
函数可从Objective-C调用,因此需要在其前面使用@objc
。因此,您的Swift代码应该像这样更改:
@objc public class MyTest: NSObject {
@objc public func addTest() {
print("test")
}
}
基于上述相同的文档,您可以通过删除addTest()
使框架之外的Objective-C代码访问public
更加困难:
@objc func addTest()...
(尽管您仍然需要@objc
)。
然后在您的Objective-C类中可以做到:
[test performSelector:@selector(addTest)];
但是,框架之外的任何代码都可以做同样的事情。
另一个观察结果是,在示例中导致错误的代码行#import "Test-Swift.h"
是一种将接口标头包含在应用程序目标中而不是框架中的方法。