Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)

待兔
• 阅读 1617

前言:
最近一段时间比较忙,公司项目比较多,直到现在年后过来以 后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代Object-C成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧!

今天我们主要说一下Objective-C和Swift混编所需要注意的一些事项,以及本人在实际项目中所踩过的一些坑。

一、 在Objective-C中引入Swift文件

1.想要在原来的老项目上调用Swift的类的话,这个时候可以直接选择创建一个Swift文件,当点击创建的时候Xcode会提示创建一个桥接文件如下图:

WechatIMG2031.jpeg

WechatIMG2032.jpeg

WechatIMG2034.jpeg

这里的 “xxxx-Bridging-Header.h”文件就是Xcode自动帮我们创建好的桥接文件

2、文件创建完成以后还需要做以下的配置:

WechatIMG2052.jpeg

Defines Module: 是否定义模块。默认app类的工程为NO,framwork工程默认为YES。
Product Name: 产品名称,在这里在需要使用Swift文件的地方引入 “xxxx-Swift”头文件就可以使用了 xxxx为产品名称 如下图,我的项目名为 OCASwiftTest

WechatIMG2053.jpeg

二、Swift文件中引入OC的文件

在swift项目中创建一个OC文件的时候,Xcode 也会提示创建一个桥接文件 点确定创建桥接文件,Xcode会自动创建一个桥接文件
名字:工程名-Bridging-Header.h
把swift需要用到的OC文件的头文件放到桥接文件里 工程名-Bridging-Header.h

注意:

1、OC项目在导入swift文件前 先按照系统提示创建桥接文件,
2、在 targets -> Build Settings -> Packaging 中设置Defines Module 为YES
3、在OC中调用swift文件的时候,swift中的类 要继承NSObject
不然没办法在OC中调用
4、OC中调用swift文件需要导入”工程名 -Swift.h"
(这个是build Setting -> Packaging->Product Module Name 的名字,而这个属性默认是工程的名字)
5、写完记得command + B 编译 一下
6、swift项目 引用OC文件也需要创建 桥接文件,在这个桥接文件中导入OC文件的头文件
7、桥接文件只有一个,作用只是为了 swift 引用OC文件,OC引用swift 文件虽然也需要创建桥接文件
但是不需要在桥接文件中 导入swift文件
8、如果一个项目既有OC引用swift 也有swift引用OC ,就先设置OC调用swift文件
在桥接文件 导入OC文件,OC可以定义PCH文件导入”工程名 -Swift.h"

在这里说一下,如果不想使用Xcode提示创建的桥接文件,也可以自己手动创建

WechatIMG2054.jpeg

WechatIMG2057.jpeg

创建完自定义的桥接文件以后再设置一下文件路径就可以了:

Build Setting -> Swift Compiler - Code Generation中 设置Objective-C Bridging Header 为自定义的桥接文件相对于工程的绝对路径,也就是项目总文件夹的路径,如果在第一层,就直接写自定义的桥接文件的名file.h,如果在下一层,文件夹/桥接文件 app/file.h

本篇文章先到这,以后会更新问题以及解决方案和纯Swift开发所需要注意的问题。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
九路 九路
3年前
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(二)
上篇在介绍了Swift与OC混编开发所需要准备的一些必要条件 SwiftObjectiveC混编注意事项(https://www.jianshu.com/p/52ab6a316cbe),今天只说一下我在实际项目中所踩过的坑,希望你们以后绕过这些坑吧。1、使用cocopods管理Swift文件所遇到的问题:我们在开发的过程中,各种优秀的框架
九路 九路
3年前
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)
前言:最近一段时间比较忙,公司项目比较多,直到现在年后过来以后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代ObjectC成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧!今天我们主要说一下ObjectiveC和Swift混编
Easter79 Easter79
3年前
Swift3.0对AFNetworking的封装 附demo
由于最新的Alamofire(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2FAlamofire%2FAlamofire)网络框架只支持Swift3.0,现在还有一大部分开发者在项目中用OC于Swift混编的方式,所以就用最新的Swift3.
Easter79 Easter79
3年前
Swift调用sha1算法
在Swift中通过调用OC的CommonCrypto库可以很方便的实现String字符串转换为sha1。在一个swift项目中,需要使用桥接头文件(Bridgingheader)的方式来引入一个OC库,才能调用OC中的内容。本文也将作为Swift项目中如何调用ObjectiveC代码的一个介绍。标准实现步骤1、新建一个Obje
Easter79 Easter79
3年前
Swift学习第二练——Swift项目时光电影
Swift学习第二练——Swift项目时光电影    很早以前的一个OC的练习项目,用swift重新写了一遍,因为xcode版本的更新对swift的兼容度也在不断改变,此版本适用于xcode6.1。    这个项目中,用swift将iOS官方SDK中的HTTP进行了封装,使用了swift编写的异步加载网
Easter79 Easter79
3年前
Swift学习第一练——用Swift实现的FlappyBird小游戏
用Swift实现的FlappyBird小游戏   伴随着apple公司对swift的推广态度深入,swift火的很快,并且swift精简便捷的语法和强大的功能,对于使用Object—C开发iOS的开发者来说,也有必要了解学习一下swift。这篇博客跳过swift干涩的语法,直接从一个小游戏项目开始使用s
万字长文详解如何使用Swift提高代码质量 | 京东云技术团队
京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%以上的业务。通过使用Swift提高了团队内同学的开发效率,同时也带来了质量的提升,目前来自Swift的Crash的占比不到1%。在这过程中不断的学习/实践,团队内的CodeReview,也对如何使用Swift来提高代码质量有更深的理解。
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这