自从苹果2014年发布Swift,到现在已经两年多了,而Swift也来到了3.1版本。最近利用工作之余,把官方的Swift编程指南看了一遍。现在整理一下笔记,回顾一下以前的知识,有需要的同学可以去看Swift官方文档。
OC项目中加入swift(OC与Swift混编)
1、在工程名字为:ZuiMeiXinNiang的OC项目中创建一个控制器,语音选择swift,如:
SwiftTestViewController.swift
2、如下图Xcode弹出“是否配置oc桥接头文件”的提示,然后点击Create Bridging Header然后就会自动生成“ZuiMeiXinNiang-Bridging-Header.h”的OC和Swift桥接头文件。
3、ZuiMeiXinNiang-Bridging-Header.h实质上是一个供swift使用的头文件,在这里把所有要暴露给swift的oc头文件都添加进去,这样写swift的时候就可以直接使用那些oc的类和方法了。
4、因为swift本身没有头文件,只有.swift;而oc有.h和.m文件。有了这个声明,.swift就可以直接使用oc的.h了(下面代码片段为我的ZuiMeiXinNiang-Bridging-Header.h文件内容,在里面导入OC头文件)
#import<Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//系统提示框封装
#import "AlertViewTool.h"
//自动布局
#import <Masonry.h>
5、从OC里push到swift控制器:
(如从ShoppingViewController.m 跳转到 SwiftTestViewController.swift)
(1)首先在OC的pch文件里导入swift的头文件,这样整个oc项目中就可以用获取到swift的类了(如下代码片段)。
#ifndef ZuiMeiXinNiang_PrefixHeader_pch
#define ZuiMeiXinNiang_PrefixHeader_pch
//swift测试(头文件固定,是由项目名称+-Swift.h组成的,这里导入头文件后,就不需要分别导入其他swift类的头文件了)
#import "ZuiMeiXinNiang-Swift.h"
#endif
(2)ShoppingViewController.m里push
//OC控制器button点击事件跳转到swift控制器
-(void)onLeftbuttonClick{
SwiftTestViewController * swiftTest = [[SwiftTestViewControlleralloc] init];
swiftTest.hidesBottomBarWhenPushed = YES;
[self.navigationControllerpushViewController:swiftTest animated:YES];
}
6、接下来就可以直接在LearnSwift.swift中写swift代码啦~随便声明一个类,打些log:(图为:我的LearnSwift.swift文件内容)
import UIKit
class SwiftTestViewController: UIViewController {
overridefunc viewDidLoad() {
super.viewDidLoad()
NSLog("打印swift日志")
// Do any additional setup after loading the view.
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
6、编译直接通过,这就是在swift中使用oc类和方法了,一切顺利!
7、在oc中使用swift,我在AppDelegate.m中使用刚才创建的swift类,那么先要引用swift头文件,即#import "ZuiMeiXinNiang-Swift.h",然后在这个.m文件中就可以任意使用swift创建的类和方法了:
SwiftTestViewController *learnSwift = [[SwiftTestViewController alloc] init];
[learnSwift logsth:@"code from oc"];
8、编译运行直接过!输出:
this is a log from swift : code from oc
9、理解下#import "ZuiMeiXinNiang-Swift.h"
10、其实是项目名-Swift.h,这也是Xcode自动生成的,根据你写的所有swift代码,生成一个oc的.h文件,进行类和方法的声明,这样在oc里引用这个头文件后,就相当于引用了所有swift声明,可以直接使用了。
swift3.1
更多精彩内容,请关注雪缘寻梦微信公众号(微信ID:xueyuanxunmeng)
编辑人员:爱恨的潮汐(2017.4.12)