美文网首页iOS
OC与Swift混编

OC与Swift混编

作者: 丨Majestic灬磊 | 来源:发表于2019-05-27 15:52 被阅读0次

    前言

    看到这个标题,大家伙可能会认为我太out了,Swift都出来4年了,类似的文章数不胜数,还有什么可写的。对此我只想说:是的,的确是这样😀。但是本篇介绍的还是有其独特的亮点,这些亮点可以让你对桥接文件产生更充分的认识

    这里先介绍普通工程下,Swift与OC混编时桥接文件的建立方法

    Swift调用OC实现

    1.新建一个语言为Swift的工程文件

    1558941296888.jpg

    2.在工程文件中新建一个OC文件

    1558941496653.jpg

    这个时候回出现一个提示框,点击"Create Bridging Header"。(注:这个关系到引用OC文件)

    1558941523651.jpg

    点完之后会创建一个header.h的文件,这个文件是用来导入OC的文件的

    1558941566417.jpg

    3.在header.h文件中导入OC的头文件

    WX20190527-151709.png

    4.引用OC方法

    OC的.h文件,这里有无参数的方法,有参数的方法,回调的方法,有参数回调的方法和多参数回调的方法,如下:

    #import <Foundation/Foundation.h>
    
    @interface OCFile : NSObject
    
    - (void)sayHello;
    
    - (void)saySomething:(NSString *)str;
    
    - (void)sayCallback:(void(^)(NSString *))callback;
    
    - (void)saySomething:(NSString *)str callback:(void(^)(NSString *))callback;
    
    - (void)saySomething1:(NSString *)str1 Something2:(NSString *)str2 callback:(void(^)(NSString *))callback;
    @end
    
    

    OC的m文件如下:

    #import "OCFile.h"
    
    @implementation OCFile
    
    - (void)sayHello
    {
        NSLog(@"Hello World");
    }
    
    - (void)saySomething:(NSString *)str
    {
        NSLog(@"%@",str);
    }
    
    - (void)sayCallback:(void (^)(NSString *))callback
    {
        if (callback) {
            callback(@"Hello World 3");
        }
    }
    
    - (void)saySomething:(NSString *)str callback:(void (^)(NSString *))callback
    {
        if (callback) {
            callback(str);
        }
    }
    
    - (void)saySomething1:(NSString *)str1 Something2:(NSString *)str2 callback:(void (^)(NSString *))callback
    {
        if (callback) {
            callback([NSString stringWithFormat:@"%@ %@",str1,str2]);
        }
    }
    @end
    
    

    在Swift中的引用方式如下:

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let oc = OCFile();
            oc.sayHello();
    
            oc.saySomething("Hello World 2");
    
            oc.sayCallback { (str) in
                print(str!);
            }
    
            oc.saySomething("Hello World 4") { (str) in
                print(str!);
            }
    
            oc.saySomething1("Hello World", something2: "5") { (str) in
                print(str!);
            }
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
    }
    
    

    OC调用Swift实现

    oc文件引用swift文件,只需导入“#import "文件名-Swift.h"”文件,如图,我的文件名为SwiftWithOC,那么导入文件名为#import "SwiftWithOC-Swift.h"

    #import "OCNewObject.h"
    #import "SwiftWithOC-Swift.h"
    
    @implementation OCNewObject
    
    
    - (void)nslogHello
    {
        SwiftOCTest *swift = [[SwiftOCTest alloc] init];
        [swift getGongZhongHaoName];
        
        NSLog(@"Hello World");
    }
    

    相关文章

      网友评论

        本文标题:OC与Swift混编

        本文链接:https://www.haomeiwen.com/subject/gpmftctx.html