繁体   English   中英

Swift框架-找不到Objective-C标头

[英]Swift framework - Objective-C header not found

我在Swift创建了一个小型测试框架。 我的目的是在Objective-C类中使用Swift类。 我创建了一个Swift文件。 然后是一个Objective-C文件。 我确保构建设置中的Objective-C标头是Test-Swift.h
当我尝试在目标C文件中导入Test-Swift.h时,出现错误-

找不到“ Test-Swift.h”文件。

迅捷类:

import Foundation

@objc class MyTest: NSObject {
    func addTest()  {
        print("test")
    }
}  

Objective-C课程:

#import "YourTest.h"
#import <Test/Test-Swift.h>
#import "Test-Swift.h"       // Error in this line

@implementation YourTest

-(void)testTest {
    // This is how I want to use the swift class
    MyTest *test = [MyTest new];
    [test addTest];

}

@end  

框架头:

#import <UIKit/UIKit.h>

//! Project version number for Test.
FOUNDATION_EXPORT double TestVersionNumber;

//! Project version string for Test.
FOUNDATION_EXPORT const unsigned char TestVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import <Test/PublicHeader.h>  

构建设置(objective-C标头):

在此处输入图片说明

我已将“ 定义模块 设置为“ 是”

在框架目标中导入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声明将需要具有publicopen访问修饰符,以便通过-Swift.h接口标头可见。 您还需要使Objective-C中的addTest()函数可调用,因此在其前面需要@objc 因此,您的Swift代码应该像这样更改:

@objc public class MyTest: NSObject {
    @objc public func addTest()  {
        print("test")
    }
}  

基于上面引用的相同文档,您可以通过删除public来使框架之外的Objective-C代码访问addTest()更加困难:

@objc func addTest()...

@objc ,您仍然需要@objc )。

然后,在Objective-C类中,您可以执行以下操作:

[test performSelector:@selector(addTest)];

但是,框架之外的任何代码都可以做同样的事情。

另一个观察结果是,在示例中导致错误的代码行(即#import "Test-Swift.h" )是将接口标头包含在应用程序目标中而不是框架中的一种方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM