我有一个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
中生成
编辑:我设法用Xcode 8中的一个非常简单的工作区重现该问题(但在7.3中可能是相同的):
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
设置为 public 标头A.h
导入TestFramework.h
在这里找不到
TestFramework-Swift.h
Install Objective-C compatibility header
设置为No
现在可以编译了!
#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
,但未成功 最佳答案
好吧,我终于找到了答案。在框架内,Install Objective-C compatibility header
必须设置为Yes
,导入必须是#import <TestFramework/TestFramework-Swift.h>
而不是#import "TestFramework-Swift.h"
关于ios - 导入混合框架时在iOS应用中找不到Swift类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39374266/