ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> IOS开发 >> Swift和Objective-C混编

Swift和Objective-C混编(1/15)

来源:网络整理     时间:2018-05-21     关键词:

本篇文章主要介绍了" Swift和Objective-C混编",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 翻译自苹果官方文档和Objective-C交互互用性是指,在Swift和Objective-C之间可以建立一个互通接口,不管是Swift生成接口给Objecti...

翻译自苹果官方文档

和Objective-C交互

互用性是指,在Swift和Objective-C之间可以建立一个互通接口,不管是Swift生成接口给Objective-C对接,还是Objective-C生成接口给Swift对接。既然你决定开始用Swift来开发,那么有必要理解一下怎么运用互用性来重定义、提高、改进你写Cocoa app的方式。

互用性重要性之一是,在Swift中调用Objective-C的API。在你import一个Objective-C框架之后,你就可以用Swift的语法来实例化里面的类,继而使用它们。

初始化

要在Swift里初始化一个Objective-C类,需要用Swift的初始化语法来调Objective-C的初始化方法。

Objective-C初始化方法都以init开头,或者,如果有一个或多个参数,会以initWith:开头。在Swift文件里如果要调用Objective-C初始化方法,那么init前缀会变成Swift初始化方法。如果此时初始化方法带有参数,会去掉with,而其他参数会根据情况划分到各个参数中。

Objective-C初始化方法的声明:

- (instancetype)init;
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;

转为Swift的初始化声明:

init() { /* ... */ }
init(frame: CGRect, style: UITableViewStyle) { /* ... */ }

实例化对象的过程,更能看出Objective-C和Swift语法的不同:

Objective-C:

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

Swift:

let myTableView: UITableView = UITableView(frame: .zero, style: .grouped)

不用调用alloc,Swift替你处理了。还有,调用Swift风格的初始化函数,不会到处出现init。

当给变量或者常量赋值的时候,你可以指明一个类型,或者可以不指明这个类型,让Swift根据初始化方法自动推导出类型。

let myTextField = UITextField(frame: CGRect(x: 0.0, y: 0.0, width: 200.0, height: 40.0))

这里的UITableView和UITextField和你在Objective-C里实例化出来的对象是一样的,Objective-C里怎么用,这里就怎么用,根据各自的类型,获取属性、调用方法都一样。

类工厂方法和方便初始化方法

为了保持一致性和简单,Objective-C的类工厂方法引入Swift后,会改为方便初始化方法。这样,使用这些方法就像使用初始化方法一样。

例如,下面这个就是Objective-C中的一个工厂方法:

UIColor *color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0];

在Swift中,要这样调用:

相关图片

相关文章