iOS开发精进程序员iOS Developer

创建用到OC Framework的Swift Framework

2016-08-26  本文已影响1922人  huhueggtest_tdp

遇到的问题

平时很熟悉在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

上一篇下一篇

猜你喜欢

热点阅读