創建用到OC Framework的Swift Framework給Swift / OC工程使用

遇到的問題

平時很熟悉在Swift工程中使用Objective-C的方法,一個橋接頭文件就搞定了。在寫Swift Framework的時候很自然的就是先隨意創建個oc文件,等待彈出是否需要自動創建橋接文件的提示。沒出現! 手動添加也不生效!

那么如何在Swift的framework中使用OC的framework呢?
剛踩完坑,留個demo。

創建OC Framework

OCFramework

為swift framework調用做配置

  1. 需要把給Swift調用的TestOCFramework.h添加到OCFramework.h中
此處添加需要被SwiftFramework訪問的.h
  1. 設置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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容