我有一个框架,Objective-C
和Swift
混合在一起。它单独编译,但当我在Objective-C
iOS应用程序中导入时,找不到Swift
个类,但找到Objective-C
个类。
导入MyFramework-Swift.h
时,我的Swift类在框架内找到
iOS
应用和框架是同一工作区中的两个不同项目。
Defines Module
和Embedded content contains Swift Code
设置为Yes
,而我的Swift
课程已公开@objc
我尝试使用@import MyFramework
和#import <MyFramework/MyFramework-Swift.h>
但没有成功。
我没有在框架的Headers目录中看到MyFramework-Swift.h
头文件到项目中。不确定这是否正常。它是在DerivedData
TestFramework
创建A.h
文件
@class B;
@interface A : NSObject
-(void)print:(B*)caller;
@end
创建A.m
文件
#import <Foundation/Foundation.h>
#import "TestFramework-Swift.h"
#import "A.h"
@implementation A
-(void)print:(B*)caller {
[caller test];
}
创建B.swift
文件
import Foundation
@objc public class B : NSObject {
public func test() {
print("test");
}
}
将A.h
设置为公共标题
A.h
导入TestFramework.h
此处未找到TestFramework-Swift.h
Install Objective-C compatibility header
设为No
现在它编译了!
像这样更新ViewController.m
#import "ViewController.h"
@import TestFramework;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
B* b = [[B alloc] init];
A* a = [[A alloc] init];
[a print: b];
}
[...]
@end
你应该在B上有错误而不是A.我在两个项目中都将Defines Module
设置为Yes
但没有成功
答案 0 :(得分:2)
好的,我终于找到了答案。 Install Objective-C compatibility header
必须设置为Yes
,导入必须为#import <TestFramework/TestFramework-Swift.h>
而不是框架内的#import "TestFramework-Swift.h"