关于swift与objective-c混合使用

在xocde6出来我们大部分代码都是用objective-c写的(部分C/C++),现在出生来了一个新的语言叫swift,那么如何既能使用我们之前的代码,还可以使用新语言呢, 本文就此做一下说明。

关于swift语方的学习可以看文档 The Swift Programming Language 本文假设你已经有所了解,下面基于当前您当前在做的objective-c来做swift扩展, 假设我们想要用swift在原来的工程中做一个新的view界面, 这个view会用到原有的objective-c中的类,最终将这个新的view 再加到我们现有工程中。

首先看官方说明, 两种语是可以同时存在同一个工程中, 不论这个工程是基于哪一种语言创建的, 都可以加入另一个语言,使他们同时存在同一个工程中进行混合编译。

1. 我们添加swift类到现有的objective-c工程中。CMD+N 如下所示

2.点Next后 输入sfLoginView 语言选择swift

3.点Next后 会弹出堤示,是否创建桥接文件,只有第一次创建时才会出现, 创建第二个类时如果之前已经创建就不会有提示了, 该文件被用来在swift中使用objective-c的类时,引入头文件。

4.点击 YES后就创建了两个文件,如下图所示,我的工程名叫SePass,生成的桥接文件叫SePass-Bridging-Header.h

5.打开sfLoginView.swift文件,创建一个我们的swift类,当然你也可以使用playground文件来编辑后再copy到swift文件中。

6. 现在假设我们需要在swift中使用一个objective-c的一个类,叫GTMBase64, 此时我们只要打开刚才生成的桥接文件SePass-Bridging-Header.h 在里面引用我们想要的头文件。

7. 引用头文件后,就可以直接用该类了。

var imageData:NSData =GTMBase64.decodeString(g_DataImageKey)

8. 现在我们用swift编写的类sfLoginView已经完成了,接下来我们要在现有的objective-c中引用我们的swift编写的类了, 因为swift类自己没有头文件,我们无法直接import过来, 所以我们要帮助他生成一个可以引用的头文件,点工程文件->选targets -> BuildingSettings -> Product Module Name 我们输入whatwhatwhat

9. 此时XCode会生成一个头文件,whatwhatwhat-swift.h 我们只在要需要使用sfLoginView的oc.m文件中引用这个头文件后,就可以使用sfLoginView类了

#import "whatwhatwhat-swift.h"

10. 我们再来看下人whatwhatwhat-swift.h中是什么内容

看来是系统帮助我们生成了, 对应swift类的objective-c的类实现方式

11.下面是官方说明, 一旦你导入swift代码到你的工程后,你就可以使用标准ocjective-c来操作swift类

至此任务完成, 匆忙打字编辑,如果有写的不对的, 欢迎批评指正交流。

QQ:407300101

关于swift与objective-c混合使用,布布扣,bubuko.com

时间: 2024-12-30 00:38:58

关于swift与objective-c混合使用的相关文章

IOS-Swift、Objective-C、C++混合编程

1.Objective-C调用C++代码 后缀为m文件的是Objective-C的执行文件,而后缀为mm文件的是Objective-C++文件. 直接在Objective-C中是无法调用C++代码的,所以如果需要在Objective-C调用C++语言就需要直接将后缀m文件改为mm,然后就可以调用C++代码了. Objective-C兼容C,Objective-C++兼容C.C++. 接下来是在OC工程中创建C++文件,并调用C++的代码: 然后在OC文件中直接用C++的语法调用C++,所以前提是

Swift调用Objective C的FrameWork

很多Github的库经过很多年的发展,源码都是OC写的,,所以,用Swift调用OC的库就是开发中难免遇到的的一个问题,本文以AFNetworking为例,讲解如何跨语言调用. 第一步 创建一个空的工程  注意,语言选择Swift 第二步,创建bridging-header 这个文件的作用,就是把OC的接口暴露给Swift.有两种方式  方式一  创建一个OC文件,然后点击确定    弹出是否要创建Bridging-Header,点击确定,这样会生成三个文件,其中的一个就是我们要用的SwiftU

Swift中的错误处理

前言 任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃.良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性. 本文的Swift版本:Swift 3 Objective C 返回nil 如果出错了,就返回空是Objective C中的一种常见的处理方式.因为在Objective C中,向nil发送消息是安全的.比如: - (instancetype)init { self = [super init]; if (self) { } //如果初始化失败,会返回nil ret

寒城攻略:Listo 教你 25 天学会 Swift 语言 - 25 Listo's Conclusion

import Foundation //*********************************************************************************************** //1.Listo's Conclusion(Listo 的编写总结) //_______________________________________________________________________________________________

使用命令行工具运行Xcode 7 UI Tests

原文:Run Xcode 7 UI Tests from the command line 苹果在Xcode 7中引入了一项新技术UI Tests,允许开发者使用Swift或Objective C代码来进行UI测试.直到现在一个可行的方法是使用UI Automation.通过UI Tests,可使用Xcode适当调试问题以及使用Swift或Objective C而无需处理JavaScript代码.首先为UI Tests创建一个新的target: 在测试分区下,选中Cocoa Touch UI T

手把手教你从Core Data迁移到Realm

来源:一缕殇流化隐半边冰霜 (@halfrost ) 链接:http://www.jianshu.com/p/d79b2b1bfa72 前言 看了这篇文章的标题,也许有些人还不知道Realm是什么,那么我先简单介绍一下这个新生的数据库.号称是用来替代SQLite 和 Core Data的.Realm有以下优点: 使用方便 Realm并不是基于SQLite的对象关系映射数据库.它是使用自己的持久化引擎,为简单和速度而生.用户们说,他们在数分钟之内就上手了Realm,构建一个app只需要数小时,每个

手把手教你从 Core Data 迁移到 Realm

前言 看了这篇文章的标题,也许有些人还不知道Realm是什么,那么我先简单介绍一下这个新生的数据库.号称是用来替代SQLite 和 Core Data的.Realm有以下优点: 使用方便 Realm并不是基于SQLite的对象关系映射数据库.它是使用自己的持久化引擎,为简单和速度而生.用户们说,他们在数分钟之内就上手了Realm,构建一个app只需要数小时,每个app开发时间至少节约数周的时间. 快 Realm比其他的对象关系映射型数据库(Object Relational Mapping),甚

【iOS与EV3混合机器人编程系列之一】iOS要干嘛?EV3可以更酷!

乐高Mindstorm EV3智能机器人(以下简称EV3)自从在2013年的CES(Consumer Electronics Show美国消费电子展)上展出之后,就吸引了全球广大机器人爱好者的眼球!EV3相比其上一代机器人NXT最大的提升就在于其硬件上.除了更强大的ARM处理器,并加载了Linux操作系统之外,EV3还配备了蓝牙,支持外接USB,外接WiFi.因为有了这么多的硬件提升,EV3最酷的特性在于EV3支持iOS设备!!!这使得我们可以使用iOS设备比如iPhone来控制EV3!乐高官方

Fluter 编译第一个iOS应用

一.流程说明 1)fluter是一个跨平台UI库,可以一份界面代码在iOS和Android上面运行 2)在Mac上面安装Fluter的环境,相对比较简单,通过简单的命令行可以设置环境 3)可以使用特定IDE,代码可以热调试 4)官方说Dart和swift和OC可以混合使用,下一次探索这一点 二.安装步骤: 1)第一步,在Mac上面安装Fluter的环境,相对比较简单 git clone -b beta https://github.com/flutter/flutter.git export P