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

九路 等级 760 0 0

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

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

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

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

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

WechatIMG2031.jpeg

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

WechatIMG2032.jpeg

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

WechatIMG2034.jpeg

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

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

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

WechatIMG2052.jpeg

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

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

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提示创建的桥接文件,也可以自己手动创建

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

WechatIMG2054.jpeg

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

WechatIMG2057.jpeg

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

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

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

收藏
评论区

相关推荐

Swift 简介
Swift和ObjectiveC的主要区别 1,编程范式 Swift可以面向协议编程、函数式编程、面向对象编程。 Swift语言引入了协议、协议的扩展、泛型等新特性,因此使用Swift语言可以很好地面向协议编程;Swift语言将函数和闭包提升为语言的一等公民,函数可以作为一个变量、可以作为其他函数的参数、作为其他函数的返回值等来传递,所以
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)
前言: 最近一段时间比较忙,公司项目比较多,直到现在年后过来以 后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代ObjectC成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧! 今天我们主要说一下ObjectiveC和Swift混编
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)
前言: 最近一段时间比较忙,公司项目比较多,直到现在年后过来以 后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代ObjectC成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧! 今天我们主要说一下ObjectiveC和Swift混编
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(二)
上篇在介绍了Swift与OC混编开发所需要准备的一些必要条件 SwiftObjectiveC混编注意事项(https://www.jianshu.com/p/52ab6a316cbe),今天只说一下我在实际项目中所踩过的坑,希望你们以后绕过这些坑吧。 1、 使用cocopods管理Swift文件所遇到的问题: 我们在开发的过程中,各种优秀的框架
swift学习笔记-OC与swift区别,从OC到swift你可以看看这个
创建对象 OC:alloc initWith Swift:(XXX:) 调用方法 OC:uicolor redcolor Swift:uicolor.redcolor() 枚举 OC:UIButtonTypeContactAdd Swift:UIButtonType.ContactAdd 输出 OC:NSLog(@"Hello
【Swift】Swift 2.0 到 Swift 3.0
问: 报错:The “Swift Language Version” (SWIFT\_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor
Framework打包前传
关于库的一些基础知识 首先来了解一下什么是库:库(Library)其实是一段编译好的二进制代码,然后将头文件暴露出来(OC中就是.h文件,swift中打包后Xcode将会自动生成.h文件 需要将Swift代码前面添加public)提供给别人使用 关于为什么使用库!1.只提供给使用者接口而不暴露出来具体的实现方式                     
OC与Swift封装网络工具类
AFNetworking ============ ATS 设置 ------ <key>NSAppTransportSecurity</key><dict>   <!--Include to allow all connections (DANGER)-->   <key>NSAllowsArbitraryLoads</key>
Swift3.0对AFNetworking的封装 附demo
> 由于最新的**[Alamofire](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2FAlamofire%2FAlamofire)**网络框架只支持Swift 3.0, 现在还有一大部分开发者 在项目中用OC于Swift混编的方式,所以就用最新的Swift 3.
Swift学习第一练——用Swift实现的FlappyBird小游戏
用Swift实现的FlappyBird小游戏 ----------------------       伴随着apple公司对swift的推广态度深入,swift火的很快,并且swift精简便捷的语法和强大的功能,对于使用Object—C开发iOS的开发者来说,也有必要了解学习一下swift。这篇博客跳过swift干涩的语法,直接从一个小游戏项目开始使用s
Swift学习第二练——Swift项目时光电影
Swift学习第二练——Swift项目时光电影 -----------------------     很早以前的一个OC的练习项目,用swift重新写了一遍,因为xcode版本的更新对swift的兼容度也在不断改变,此版本适用于xcode6.1。     这个项目中,用swift将iOS官方SDK中的HTTP进行了封装,使用了swift编写的异步加载网
Swift解读专题四——字符串与字符
Swift解读专题四——字符串与字符 ------------------ ### 一、引言         Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便。 ### 二
Swift讲解专题七——函数
Swift讲解专题七——函数 -------------- ### 一、引言         函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定。Swift和Objective-C的一大区别就在于Swift中的函数可以进行嵌套
Swift调用sha1算法
在Swift中通过调用OC的CommonCrypto库可以很方便的实现String字符串转换为sha1。 在一个swift项目中,需要使用桥接头文件(Bridging header)的方式来引入一个OC库,才能调用OC中的内容。 本文也将作为Swift项目中如何调用Objective-C代码的一个介绍。 ### 标准实现步骤 1、新建一个**Obje
swift中更强大的switch和眼花缭乱的for in
从日记中整理出switch和for in。swift的switch比起oc真的是厉害坏了而且for in中的功能也比oc的更加灵活。小作笔记 1.1 swift中swich语句会将一个值与多个可能的模式匹配。然后基于第一个成功匹配的模式来执行合适的代码块,如果想要oc中匹配到case后依旧贯穿接下来的case则要增加fallthough。switch语句一