遇到的問題
平時很熟悉在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