Objective-C里调用Swift
来源:互联网 发布:域名映射ip和端口 编辑:程序博客网 时间:2024/05/17 01:46
如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift。
Objective-C调用Swift时不需要桥接头文件,而是需要Xcode生成的头文件。这种文件由Xcode生成,不需要我们维护,对于开发人员也是不可见的。如下图所示,它能够将Swift中的类暴露给Objective-C,它的命名是:<工程名>-swift.h。我们需要将该头文件引入到Objective-C文件中,而且Swift中的类需要声明为@objc。
创建Objective-C工程
为了能够更好地介绍混合搭配调用,我们首先创建一个Objective-C工程。出于简单考虑,我们可以创建一个Mac OS X命令行工程。
启动Xcode 6,然后单击File→New→Project菜单,在打开的Choose atemplate for your new project界面中选择“OS X→Application→Command Line Tool”工程模板(如下图所示)。
接着单击“Next”按钮,随即出现如下图所示的界面。
在Product Name中输入“HelloWorld”,在Language中选择Objective-C,其他的项目可以结合自己的实际情况输入内容。相关的工程选项设置完成后,单击“Next”按钮,后面的步类似。
创建成功后的界面如下图所示,在左边的导航栏中生成了一个main.m文件。打开main.m文件,可以在右边的代码界面中看到它的代码,我们还可以在这里编写代码。
在Objective-C工程中添加Swift类
我们刚刚创建了Objective-C的工程,需要添加Swift类到工程中。具体过程是,右键选择HelloWorld组,选择菜单中的“New File…”弹出新建文件模板对话框。如下图所示,选择OS X→Source→Cocoa Class。
接着单击“Next”按钮,随即出现如图下所示的界面。在Class中输入“SwiftObject”,在Language中选择Swift,其他的选项保持默认值就可以了。
相关选项设置完成后,单击“Next”按钮,进入保存文件界面,根据提示选择存放文件的位置,然后单击“Create”按钮创建Swift类。如果工程中没有桥接头文件,在创建过程中,Xcode也会提示我们是否添加桥接头文件,可以选择不添加。
调用代码
Swift的SwiftObject创建完成后,我们会在Xcode工程中看到新增加的SwiftObject.swift文件。
SwiftObject.swift代码如下:
- import Foundation ①
- @objc class SwiftObject: NSObject { ②
- Func sayHello(greeting : String, withName name : String) ->String { ③
- var string = "Hi," + name
- string += greeting
- return string;
- }
- }
上述代码第①行引入了Foundation框架的头文件。第②行代码定义SwiftObject类,SwiftObject类继承自NSObject类。另外,我们在类前面声明为@objc,@objc所声明的类能够被Objective-C访问,@objc还可以修饰属性。
第③行代码定义了sayHello方法,它有两个参数,第一个参数不需要指定外部参数名,第二个参数(除了第一个以后所有的参数)需要指定外部参数名,例如withName是name参数的外部参数名。这是为了方便在Objective-C中调用。
下面看Objective-C端的代码,main.m文件代码如下:
- #import <Foundation/Foundation.h>
- #import "HelloWorld-swift.h" ①
- int main(intargc, const char * argv[]) {
- SwiftObject *sobj = [[SwiftObjectalloc] init]; ②
- NSString *hello = [sobjsayHello:@"Good morning"withName:@"Tony"]; ③
- NSLog(@"%@",hello); ④
- return 0;
- }
上述代码第①行引入头文件HelloWorld-swift.h,它是Objective-C调用Swift对象所必需的,它的命名规则是“<工程名>-swift.h”。
第②行代码实例化SwiftObject对象,SwiftObject是Swift中定义的类。第③行代码调用SwiftObject的sayHello方法,它在Objective-C中被调用时的方法和参数命名与SwiftObject的方法和参数之间的对应关系如下图所示。
第④行代码NSLog(@"%@",hello)用于输出结果,输出结果如下:
2014-07-05 14:25:43.879HelloWorld[3266:303] Hi,TonyGood morning
这样就实现了在Objective-C中调用Swift代码,我们可以借助于这样的调用充分利用已有的Swift文件,减少重复编写代码,提高工作效率。
- Objective-C里调用Swift
- Swift调用Objective-C
- Objective-C调用Swift
- Swift调用Objective-C
- Objective-C调用Swift
- Objective-c调用Swift
- Swift 调用 Objective-C 代码
- Swift语言调用Objective-c
- Swift 与 Objective-C相互调用
- Swift调用Objective C的FrameWork
- swift 和 Objective-C 互相调用
- 【关老师】Swift调用Objective-C
- Swift和Objective-C的相互调用
- Swift 调用 Objective-C代码 1)
- Objective-C与Swift相互调用 学习笔记
- Swift项目中调用Objective-C的库
- iOS混合编程之使用Swift+Objective-C调用WebService
- swift学习笔记一: 调用Objective-C代码
- android Animation 动画
- 怎样在一个数据库中访问另一个数据库里面的表
- java中的守护进程
- 设配器模式不止是补救,有时更像是一个创造者
- spring4声明式事务--01注解方式
- Objective-C里调用Swift
- Halcon算子--区域特征
- Powershell之MOF后门
- spring4声明式事务—02 xml配置方式
- 一些简单的操作符重载
- 责任链的方法化
- android 获取当前显示页面app 包名
- iOS 调用系统相机和相册
- openwrt之wifi驱动显示连接设备MAC