遇到的问题
平时很熟悉在Swift工程中使用Objective-C的方法,一个桥接头文件就搞定了。在写Swift Framework的时候很自然的就是先随意创建个oc文件,等待弹出是否需要自动创建桥接文件的提示。没出现! 手动添加也不生效!
那么如何在Swift的framework中使用OC的framework呢?
刚踩完坑,留个demo。
创建OC Framework
OCFramework
为swift framework调用做配置
- 需要把给Swift调用的TestOCFramework.h添加到OCFramework.h中
此处添加需要被SwiftFramework访问的.h
- 设置OCFramework->BuildPhases->Headers
将TestOCFramework.h移至Public
TestOCFramework
TestOCFramework.h
#import <Foundation/Foundation.h>
@interface TestOCFramework : NSObject
+(NSString *)hello;
@end
TestOCFramework.m
#import "TestOCFramework.h"
@implementation TestOCFramework
+(NSString *)hello {
return @"Objective-c hello";
}
@end
创建Swift Framework
SwiftFramework
添加OCFramework.framework
添加OCFramework.framework
import OCFramework
添加需要调用的OCFramework的.h
TestSwiftFramework
import UIKit
public class TestSwiftFramework: NSObject {
public class func hello() {
//测试调用OCFramework
if let ocHello = TestOCFramework.hello() {
print("TestSwiftFramework.hello load oc framework: \(ocHello)")
} else {
print("TestSwiftFramework load OCFramework failed")
}
}
}
SwiftFramework调用OCFramework就这样完成啦,分别创建OC和Swift的Demo来测试一下。
TestOCDemo
创建OC工程测试
OC测试工程
添加Framework
添加使用的Framework
为SwiftFramwork修改Build Settings
将Always Embed Swift Standard Libraries设置为Yes
在AppDelegate调用SwiftFramework试试
#import "AppDelegate.h"
#import "SwiftFramework/SwiftFramework-Swift.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//测试调用SwiftFramework
[TestSwiftFramework hello];
return YES;
}
@end
日志
TestSwiftFramework.hello load oc framework: Objective-c hello
TestSwiftDemo
创建Swift工程测试
Swift测试工程
添加Framework
添加Framework
在AppDelegate调用SwiftFramework试试
import UIKit
import SwiftFramework
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//测试调用SwiftFramework
TestSwiftFramework.hello()
return true
}
}
日志
TestSwiftFramework.hello load oc framework: Objective-c hello
查看Demo源码
https://github.com/huhuegg/Demo/tree/master/UseOCFrameworkInSwiftFramework