ios开发ios swift oc混编里怎么用oc库

如何在OC中使用Swift如何在Swift中使用OC - CSDN博客
如何在OC中使用Swift如何在Swift中使用OC
转自:http://m.blog.csdn.net/article/details?id=
一.在OC中使用Swift
1.首先创建一个工程名字就叫做CHWTest1
2.在工程的Build
Setting中把Defines Module改为YES,如图
3.把Product Name设为工程的名字,如图
4.在你的OC文件中导入ProjectName-Swift.h(这个&ProjectName-Swift.h是系统自动创建的,不要手动去创建,ProjectName是你的工程得名字,这里就是CHWTest1)
这时候编译会报错,因为并没有Swift文件
5.创建Swift文件
这里创建一个Swift的类,语言选择为Swift,然后会提示你,是不是创建一个OC的桥接头文件,这里选择YES,创建完之后,你的工程里是这样的
是的,你会发现你的工程中多了个&PrductName-Bridging-Header.h的一个文件,这个的作用就是OC和Swift的桥接,里面有这样一句话
&Use this file to import your target's public headers that you would like to expose to Swift.意思就是,在这里面你个以导入类,以供你的Swift使用,这里面我的例子是OC-Swift-OC三个类之间的push,具体代码如下
然后push的效果就出来了,如图
OK,到这里,OC中使用Swift就已经结束,不难吧!
二,如何在Swift中使用OC
Swift中使用OC文件和上面差不多,只是需要几步
1.创建一个Swift工程,这里面就叫做CHWTest2
2.Swift代码引用OC,需依靠&Objective-C
bridging header&将相关文件暴露给Swift,创建&Objective-C
bridging header&有两种方法:
(1)当你在Swift项目中尝试创建OC文件时,系统会自动帮你创建&Objective-C
bridging header,如下
此时除了&.h&、.m&文件之外,会额外多出一个叫做&项目工程名-Bridging-Header.h&的文件,这个文件中导入的类是可以暴露给Swift看到的。你要做的,只是#import
这个步骤和上面是差不多的,另外一种方式就是
(2)自己创建&Objective-C-bridging-header这个桥接文件
File & New & File & (iOS or OS X) & Source & Header File,切记,名字&一定要&是&项目工程名-Bridging-Header.然后还有一步,在项目的&Build
Settings选项里,要确保Swift Compiler&选项里有这个&Bridging
Header&文件的设置,路径必须指向文件本身,而不是目录!
这里,Swift中就可以使用OC文件了!
本文已收录于以下专栏:
相关文章推荐
OC项目中使用Swift
本文版权归作者所有,如需转载请联系孟祥月
CSDN博客:http://blog.csdn.net/mengxiangyue
独立博客:http://meng...
最近在研究swift,就我看来,swift确实是比OC更优秀的语言,这可以体现在很多方面,网上已经对比的很透彻,就不一一赘述。
今天研究了一下如何在OC项目中使用swift文件,即OC和swift的...
Swift and Objective-C in the Same Project
在项目里交叉使用Swift和OC
Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应...
原文转载自:原文链接
几天前,我开始新的App的开发了。终于有机会把swift用在实战中了,也学到了之前纯学语法时没有机会获得的知识。
这篇博文中,我就如何使用swift、OC混编做一个介...
Swift语言中,有很多封装类并没有,如果需要使用到,就需要桥接OC语言中的类,这时候就需要使用桥接头文件,一下是使用的步骤:创建一个Swift项目Demo,然后新建一个OC语言的文件如图:创建一个B...
OC项目引入Swift方法
在OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库
1.在已有的OC工程中新建一个Swift文件,命名为Test.swif...
网上有很多关于OC项目中使用Swift类的方法,但是亲自试了之后,发现不够详细,多次尝试后,终于找出详细的方法。
现把方法和遇到的问题,记录下来,方便其他同仁借鉴....
在项目中右键添加一个swift文件,我添加的LearnSwift.swift添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文...
在Swift项目中使用OC,在OC项目中使用Swift
几天前,我开始新的App的开发了。终于有机会把swift用在实战中了,也学到了之前纯学语法时没有机会获得的知识。
这篇博文中,我...
为防止出问题,建议以这样的方法做:
1.建一个OC工程命名为SwiftOC
2.新建一个swfit文件命名为Test.swift,会弹出提示,选择Create Bridging Header建...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)今日: 0|主题: 28|排名: 38&
Powered by在一个项目中同时使用Swift和Objective-C代码混合编程的方法
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了在一个项目中同时使用Swift和Objective-C代码的方法,在一个工程中同时使用Swift和Objective-C混合语言编程的方法,需要的朋友可以参考下
Swift 与 Objective-C 的兼容能力使你可以在同一个工程中同时使用两种语言。你可以用这种叫做 mix and match 的特性来开发基于混合语言的应用,可以用 Swfit 的最新特性实现应用的一部分功能,并无缝地并入已有的 Objective-C 的代码中。
Mix and Match 概述
Objective-C 和 Swift 文件可以在一个工程中并存,不管这个工程原本是基于 Objective-C 还是 Swift。你可以直接往现有工程中简单地添加另一种语言的源文件。这种自然的工作流使得创建混合语言的应用或框架 target,与用单独一种语言时一样简单。
混合语言的工作流程只有一点点区别,这取决于你是在写应用还是写框架。下面描述了普通的用两种语言在一个 target 中导入模型的情况,后续章节会有更多细节。
在同个应用的 target 中导入
如果你在写混合语言的应用,可能需要用 Swift 代码访问 Objective-C 代码,或者反之。下面的流程描述了在非框架 target 中的应用。
将 Objective-C 导入 Swift
在一个应用的 target 中导入一些 Objective-C 文件供 Swift 代码使用时,你需要依赖与 Objective-C 的桥接头文件(bridging header)来暴露给 Swift。当你添加 Swift 文件到现有的 Objective-C 应用(或反之)时,Xcode 会自动创建这些头文件。
如果你同意,Xcode 会在源文件创建的同时生成头文件,并用 product 的模块名加上 -Bridging-Header.h 命名。关于 product 的模块名,详见 Naming Your Product Module。
你应该编辑这个头文件来对 Swift 暴露出 Objective-C 代码。
在同一 target 中将 Objective-C 代码导入到 Swift 中
1) 在 Objective-C 桥接头文件中,import 任何你想暴露给 Swift 的头文件,例如:
// OBJECTIVE-C
#import "XYZCustomCell.h"
#import "XYZCustomView.h"
#import "XYZCustomViewController.h"
2) 确保在 Build Settings 中 Objective-C 桥接头文件的 build setting 是基于 Swfit 编译器,即 Code Generation 含有头文件的路径。这个路径必须是头文件自身的路径,而不是它所在的目录。
这个路径应该是你工程的相对路径,类似 Info.plist 在 Build Settings 中指定的路径。在大多数情况下,你不需要修改这个设置。
在这个桥接头文件中列出的所有 public 的 Objective-C 头文件都会对 Swift 可见。之后当前 target 的所有 Swift 文件都可以使用这些头文件中的方法,不需要任何 import 语句。用 Swift 语法使用这些 Objective-C 代码,就像使用系统自带的 Swift 类一样。
let myCell = XYZCustomCell()
myCell.subtitle = "A custom cell"
将 Swift 导入 Objective-C
向 Objective-C 中导入Swift 代码时,你依赖 Xcode 生成的头文件来向 Objective-C 暴露 Swift 代码。这是自动生成 Objective-C 头文件,它包含了你的 target 中所有 Swift 代码中定义的接口。可以把这个 Objective-C 头文件看作 Swift 代码的 umbrella header。它以 product 模块名加 -Swift.h 来命名。关于 product 的模块名,详见Naming Your Product Module。
你不需要做任何事情来生成这个头文件,只需要将它导入到你的 Objective-C 代码来使用它。注意这个头文件中的 Swift 接口包含了它所使用到的所有 Objective-C 类型。如果你在 Swift 代码中使用你自己的 Objective-C 类型,确保先将对应的 Objective-C 头文件导入到你的 Swift 代码中,然后才将 Swift 自动生成的头文件导入到 Objective-C .m 源文件中来访问 Swift 代码。
在同一 target 中将 Swift 代码导入到 Objective-C 中
在相同 target 的 Objective-C .m 源文件中,用下面的语法来导入Swift 代码:
// OBJECTIVE-C
#import "ProductModuleName-Swift.h"
target 中任何 Swift 文件将会对 Objective-C .m 源文件可见,包括这个 import 语句。关于在 Objective-C 代码中使用 Swift 代码,详见 。
导入到 Swift
导入到 Swift
Swift 代码
不需要import语句
Objective-C 代码
不需要import语句;需要 Objective-C `umbrella头文件
#import "Header.h"
在同个 Framework 的 target 中导入
如果你在写一个混合语言的框架,可能会从 Swift 代码访问 Objective-C 代码,或者反之。
将 Objective-C 导入 Swift
要将一些 Objective-C 文件导入到同个框架 target 的 Swift 代码中去,你需要将这些文件导入到 Objective-C 的 umbrella header来供框架使用。
在同一 framework 中将 Objective-C 代码导入到 Swift 中
确保将框架 target 的 Build Settings & Packaging & Defines Module 设置为 Yes。然后在你的 umbrella header 头文件中导入你想暴露给 Swift 访问的 Objective-C 头文件,例如:
// OBJECTIVE-C
#import &XYZ/XYZCustomCell.h&
#import &XYZ/XYZCustomView.h&
#import &XYZ/XYZCustomViewController.h&
Swift 将会看到所有你在 umbrella header 中公开暴露出来的头文件,框架 target 中的所有 Swift 文件都可以访问你 Objective-C 文件的内容,不需要任何 import 语句。
let myCell = XYZCustomCell()
myCell.subtitle = "A custom cell"
将 Swift 导入 Objective-C
要将一些 Swift 文件导入到同个框架的 target 的 Objective-C 代码去,你不需要导入任何东西到 umbrella header 文件,而是将 Xcode 为你的 Swift 代码自动生成的头文件导入到你的 Obj .m 源文件去,以便在 Objective-C 代码中访问 Swift 代码。
在同一 framework 中将 Swift 代码导入到 Objective-C 中
确保将框架 target 的 Build Settings & Packaging 中的 Defines Module 设置为 Yes。用下面的语法将 Swift 代码导入到同个框架 target 下的 Objective-C .m 源文件去。
// OBJECTIVE-C
#import &ProductName/ProductModuleName-Swift.h&
这个 import 语句所包含的 Swift 文件都可以被同个框架 target 下的 Objective-C .m 源文件访问。关于在 Objective-C 代码中使用 Swift 代码,详见 。
导入到 Swift
导入到 Swift
Swift 代码
不需要import语句
Objective-C 代码
不需要import语句;需要 Objective-C `umbrella头文件
#import "Header.h"
在 Objective-C 中使用 Swift
当你将 Swift 代码导入 Objective-C 文件之后,用普通的 Objective-C 语法使用 Swift 类。
// OBJECTIVE-C
MySwiftClass *swiftObject = [[MySwiftClass alloc] init];
[swiftObject swiftMethod];
Swift 的类或协议必须用 @Objective-C attribute 来标记,以便在 Objective-C 中可访问。这个 attribute 告诉编译器这个 Swift 代码可以从 Objective-C 代码中访问。如果你的 Swift 类是 Objective-C 类的子类,编译器会自动为你添加 @Objective-C attribute。详见 。
你可以访问 Swift 类或协议中用 @Objective-C attribute 标记过东西,只要它和 Objective-C 兼容。不包括一下这些 Swift 独有的特性:
•Generics - 范型
•Tuples - 元组
•Enumerations defined in Swift - Swift 中定义的枚举
•Structures defined in Swift - Swift 中定义的结构体
•Top-level functions defined in Swift - Swift Swift 中定义的顶层函数
•Global variables defined in Swift - Swift 中定义的全局变量
•Typealiases defined in Swift - Swift 中定义的类型别名
•Swift-style variadics - Swift风格可变参数
•Nested types - 嵌套类型
•Curried functions - 柯里化后的函数
例如带有范型类型作为参数,或者返回元组的方法不能在 Objective-C 中使用。
为了避免循环引用,不要将 Swift 代码导入到 Objective-C 头文件中。但是你可以在 Objective-C 头文件中前向声明(forward declare)一个 Swift 类来使用它,然而,注意不能在 Objective-C 中继承一个 Swift 类。
在 Objective-C 头文件中引用 Swift 类
这样前向声明 Swift 类:
// OBJECTIVE-C
// MyObjective-CClass.h
@class MySwiftC
@interface MyObjective-CClass : NSObject
- (MySwiftClass *)returnSwiftO
Product 模块命名
Xcode 为 Swift 代码生成的头文件的名称,以及 Xcode 创建的 Objective-C 桥接头文件名称,都是从你的 product 模块名生成的。默认你的 product 模块名和 product 名一样。然而,如果你的 product 名有特殊字符(nonalphanumeric,非数字、字母的字符),例如点号,那么它们会被下划线(_)替换之后作为你的 product 模块名。如果 product 名以数字开头,那么第一个数字会用下划线替换掉。
你可以给 product 模块名提供一个自定义的名称,Xcode 会用这个名称来命名桥接的和自动生成的头文件。你只需要在修改在build setting 中的 Product Module Name 即可。
问题解决提示
•把 Swift 和 Objective-C 文件看作相同的代码集合,并注意命名冲突;
•如果你用框架,确保 Build Setting & Pakaging & Defines Module 设置为 Yes;
•如果你使用 Objective-C 桥接头文件,确保在 Build Settings 中 Objective-C 桥接头文件的 build setting 是基于 Swfit 编译器,即 Code Generation 含有头文件的路径。这个路径必须是头文件自身的路径,而不是它所在的目录;
•Xcode 使用你的 product 模块名,而不是 target 名来命名 Objective-C 桥接头文件和为 Swift 自动生成的头文件。详见 Naming Your Product Module;
•为了在 Objective-C 中可用, Swift 类必须是 Objective-C 类的子类,或者用 @Objective-C 标记;
•当你将 Swift 导入到 Objective-C 中时,记住 Objective-C 不会将 Swift 独有的特性翻译成 Objective-C 对应的特性。详见列表Using Swift from Objective-C;
•如果你在 Swift 代码中使用你自己的 Objective-C 类型,确保先将对应的 Objective-C 头文件导入到你的 Swift 代码中,然后才将 Swift 自动生成的头文件 import 到 Objective-C .m 源文件中来访问 Swift 代码。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具oc可以调用swift中的方法,或者引用swift中的类吗?
oc是可以调用swift的设置方法如下1、确保将
Build Settings & Packaging & Defines Module
Yes2、再修改在
build setting
Product Module Name
即可。之后的项目会自动生成swift的头文件头文件名称为Product Module Name-Swift.h所有的swift都会在这个头文件里
Swift语言与Objecti...

我要回帖

更多关于 ios oc和swift混编 的文章

 

随机推荐