OC与swift混编之--OC中使用swift写的类

前言

写项目时发现有的方法OC时没有,需要用swift来实现的,于是就跳进了混编配置的坑,参照了许多博客,爬了一上午才爬出来,在这总结一下我挖坑和填坑的经历,如有错误,欢迎纠正。

  • 需求:OC项目中使用新建swift文件的类
  • 问题:新建swift文件时,笔者的Xcode没有提示生成桥接文件,需要自己配置并手动创建桥接文件,最后在OC中成功引用swift写的类
  • 项目说明:没有使用framework与pod

重要的配置及文件认识

  1. Target–Building Setting–Packing

    • Defines Module 设置为YES

在这里插入图片描述

目测是配置项目是否接收混编的(目测哈~)

  • Product Module nameProduct name设置为项目名

在这里插入图片描述

 后面配置参数时需要引用
  1. Target–Building Setting–Swift Compiler-General

在这里插入图片描述

  • Objective-C Bridging Header:桥接文件路径配置,桥接文件名必须是“ProjectName-Bridging-Header.h”,这个文件在Swift使用OC类时使用
  • Objective-C Generated Interface Header Name:这个文件路径是混编时,系统自动生成的Swift文件对应的Objective-C的头文件路径,OC中使用Swift时使用。这个文件默认为“工程名-Swift.h”,一般不作改动。

遇到的问题及解决方案

  1. Xcode不能提示自动生成桥接文件

    OC中用Swift时的桥接文件“工程名-Swift.h”:注意,虽然系统没有提示自动生成了该文件,但是是生成了的(划重点)不需要自己再手动创建!!!!(笔者很傻地手动创建了一个,在路径配置和swift类不能识别中浪费了很多时间)。

    Swift中用OC的文件可以自己创建,详情再看看刚刚说的Objective-C Bridging Header

  2. 混编配置过程中Xcode报错

    • 若错误为“XXX……not find” (文件找不到)或者“error opening ……” 一般是文件路径配置错误,注意使用相对路径(直接为创建的头文件名),不要使用绝对路径(/User/……)!!

    • 若错误为“Failed to emit precompiled header for bridging header ”,在buildsetting中的以下两个路径中添加对应的设置,重现编译即可解决

      1. 添加 $(inherited) non-recursiveSearch Path -> Header Search Paths
      2. 添加 ${PODS_ROOT} recursiveSearch Path -> User Header Search Paths

配置好之后在文件中的使用

桥接文件实际上就是转换语言

  • 在OC中使用Swift的类

    1. Swift类最好直接或者间接地继承NSObject,不然很可能不会被OC识别出来

    2. Swift类前使用@objcMembers 表示该类及其定义的成员变量和方法可以被OC识别,如

      @objcMembers public class earthSCNView: NSObject {}
      
    3. 在需要使用swift类的OC文件中导入“工程名-Swift.h”文件就可以了,不需要再import其他的swift文件,如

      #import "物语-Swift.h"
      
  • 在Swift中使用OC

    目前没有使用,大概就是在“ProjectName-Bridging-Header.h”中导入要使用的OC头文件

其他

更详细的可以看看这篇博客:Swift和Objective-C混编的注意啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值