Objective-C和Swift混编

Objective-C和Swift混编

首先,混编这里分为两种情况分别说明,一种是Objective-C项目中添加Swift代码,一种是Swift项目添加Objective-C代码。

Objective-C 项目 添加 Swift 代码

Objective-C 调用 Swift

第一次添加一个swift文件的时候,xcode会问开发者要不要添加一个bridge,我们需要添加这样一个桥接。选择是就好了。然后会生成一个"ProductName"+"-Bridging-Header.h"

在Swift类中添加如下代码

import Foundation

class TestSwift: NSObject {
    func test() -> String {
        return "test";
    }
}

检查Build Setting,如图所示

img

这里有两个文件名,一个是上面说的一个,一个是"ProductName"+"-Swift.h"。这个文件名就是在需要调用Swift文件的时候引用的头文件,编译器会自动处理,添加或者删除Swift类的时候,编译器会自动处理此文件。

ViewController.m在调用Swift类的时候的代码

#import "ViewController.h"
#import "OCAddSwift-Swift.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    TestSwift *test = [[TestSwift alloc] init];
    NSString *str = [test test];
    NSLog(@"%@",str);
    [test testNew];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Swift 调用 Objective-C 代码

"ProductName"+"-Bridging-Header.h"中添加 Swift需要调用的Objective-C头文件。这里添加的是TestData.h

import Foundation

class TestSwift: NSObject {
    func test() -> String {
        return "test";
    }

    func testNew() {
        let test1 = TestData();
        print(test1.testNumber);
    }
}

Swift 项目调用 Objective-C 代码

Swift 调用 Objective-C 代码

第一次添加一个Objective-C文件的时候,xcode会问开发者要不要添加一个bridge,我们需要添加这样一个桥接。选择是就好了。然后会生成一个"ProductName"+"-Bridging-Header.h"

桥接形式如上面的 swift 调用 Objective-C 一致。链接

Objective-C 调用 Swift

这里有两个文件名,一个是上面说的一个,一个是"ProductName"+"-Swift.h"。这个文件名就是在需要调用Swift文件的时候引用的头文件,编译器会自动处理,添加或者删除Swift类的时候,编译器会自动处理此文件。

调用方式和上面的 Objective-C 调用 Swift 一致。链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注