当前位置:   article > 正文

Swift与OC混编_oc swift 混编

oc swift 混编

Swift与OC的混编可以总结出以下几种场景

  1. OC&Swift Mixed In The Same Target
  • Project中OC 调用 Swift
  • Pod中OC 调用 Swift
  • Project中Swift 调用 OC
  • Pod中Swift 调用 OC
  1. OC&Swift Mixed In The Different Target
  • OC Project 调用 Swift Pod
  • Swift Project 调用 OC Pod
  • OC Pod 调用 Swift Pod
  • Swift Pod 调用 OC Pod

这里把Pod替换为Framework也是一样的,有时也把Project Target说成APP Target。1是同一target内混编,2是target间混编。

主工程里OC&Swift相互调用
在OC工程里创建一个Swift类会跳出如下弹框
在这里插入图片描述

点击Create Bridging Header按钮生成桥接文件MainProject-Bridging-Header.h和MainProject-Swift, MainProject是工程名称。同时会在Build Settings里添加Swift Complier配置:
在这里插入图片描述

如果没有点击Create Bridging Header按钮,而是点击了Don’t create,那么将不会创建桥接文件,但是Build Settings里添加Swift Complier配置项,只是该配置项里没有Bridging Header,这时需要开发者自行创建桥接文件,并配置好路径。
在这里插入图片描述

OC调用Swift接口
Swift类里的接口应该加上@objc修饰

class Dog: NSObject {
   
    
    @objc let legNumber = 4
    var temper = "temper-good"
    @objc var friend = Cat()

    @objc func eat() {
   
        print("The dog is eating")
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在OC类中首先要引用MainProject-Swift.h

#import "MainProject-Swift.h"
  • 1

最后就可以在OC类里引用Swift类

#import "MainProject-Swift.h"

@implementation ViewController
- (void)viewDidLoad {
   
    [super viewDidLoad];
    Dog *dog = [[Dog alloc] init];
    [dog eat];
}
@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结论
我们再看看MainProject-Swift.h到底是什么。MainProject-Swift.h是一个自动生成的头文件,工程里没有对应的实体文件,可以Command+LeftClick点击MainProject-Swift.h进去看到其中有一段


                
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/789249
推荐阅读
相关标签
  

闽ICP备14008679号