导语
苹果在2014的WWDC中推出了Swift 这一全新的编程语言,一时之间成为各大网站的头条和所有程序员的讨论热点,与可读性较差的Objective-C相比,这门融合了多种编程语言优点的语言得到了各大编程语言开发者的认可,并迫不及待想要学习这门全新的语言,而成为一名掌握iOS开发平台的程序员。
但是,还有一群人在暗自神伤,就是我们这群被Apple虐了千万遍,我们却待它如初恋的iOS开发者
- "唉,一大波抢饭碗的人正在靠近"
- "赶紧去学,不然就跟不上时代了啊"
- "以前的代码怎么办,以前的类库怎么办"
- "不学。我继续用的Objective-C"
- ......
但是你还在五内郁结,已经有大把的开发者从发布的那天起就开始了swift之旅,而事实证明,这是一门优秀地语言,与OC可以完美结合,所以,你还在等什么,不要等到下一个正式项目,就是现在,不管你是新手还是老鸟,在做demo还是做正式项目,就是下一次 command + N,选择swift!
开始Swift
开发工具:XCode6
工程环境为 Objective-C
新建一个 Single View Application ,命名为 swiftTurialDemo1 ,Lauguage 选择 ** Objective-C **,
添加 AFNetworking 类库,如果你安装过 Cocoapods 按照如下方法添加,没有按照传统方法添加就可以了。
为其添加Podfile
,内容为
pod 'AFNetworking', '~> 2.3.1'
关闭工程,用CocoaPods
安装,重新打开 swiftTurialDemo1.xcworkspace
工程中有一个是OC代码控制的,我们做一个简单VC间传值,并使用 AFNetworking 请求网络数据一次,学习如何在Swift文件中调用OC代码以及如何在OC文件中调用swift代码
在 Main.storyboard 中添加一个 NavigationController ,将其作为 Initial View Controller ,并将 ViewController 作为它的 rootViewController
Command + N 新建一个 swift file,命名为 secondViewController, 点击 Next,会出现一个弹窗提示 Would you like to configure an Objective-C Bridging header? 这个文件便是来桥接 Objective-C代码,让你可以在 Swift 文件中调用OC代码,所以,选择 YES
打开 swiftTurialDemo1-Bridging-Header.h,此文件中存放需要在swift文件中调用的类,添加代码:
#import <AFNetworking/AFNetworking.h>
###在Swift中调用OC的代码
打开 secondViewController.swift
替换为以下代码
tips: 关于!和?请大家看Swift文档中 隐式解析可选类型 (implicitly unwrapped optionals)
import UIKit
class secondViewController: UIViewController {
var aString: String!// 声明一个变量,如果不赋初值的话会报错,在末尾添加?或者!表示可选,添加?的话,在aString被赋值之前调用String的某个方法或者属性时是不被允许的,添加!的话就可以不用赋值做操作
override func viewDidLoad() {
super.viewDidLoad()
self.title = "second"
println("a string = \(aString)")
test() // 与C语言调用函数一样
}
func test() {
let urlString = "http://www.baidu.com"
var url = NSURL(string: urlString)// 将urlString设置为需要请求的接口地址即可
var request = NSURLRequest(URL: url)// alloc init操作在swift中的初始化方法为 类名() 打括号时会如initWith...方法一样给出提示列表
var operation : AFHTTPRequestOperation = AFHTTPRequestOperation(request: request)
operation.responseSerializer = AFJSONResponseSerializer()
operation.setCompletionBlockWithSuccess({ (operation, responseObject) -> Void in
println("success")
print(responseObject)
}, failure: { (operation, error) -> Void in
println("failure")
})
operation.start()
}
}
打开 Main.storyboard , 添加一个 ViewController , 设置类为 secondViewController, 在 ViewController 上添加一个Button,标题改为 "跳转" 并添加跳转到 secondViewController 的segue.
这时运行项目,点击跳转,打印输出
a string = nil
failure
在OC文件中调用Swift代码
想要调用swift代码,同swift调用OC一样,也是需要桥接文件的,只是这个桥接文件,Apple已经帮我们创建好了,名为 "你的项目名称-swift.h",你在工程中看不见,但是import之后跟踪是可以看到这个文件的,里面做了Swift对应OC代码的转换
打开 secondViewController.swift, 在 class 末尾添加一个方法
func log() {
println("log success");
}
打开 ViewController.m, 添加
#import "swiftTurialDemo1-Swift.h"
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
UIViewController *VC = [segue destinationViewController];
if ([VC isKindOfClass:[secondViewController class]]) {
secondViewController *secondVC = (secondViewController *)VC;
secondVC.aString = @"pass a value";
[secondVC log];
}
}
再次运行,打印输出结果为
log success
a string = pass a value
failure
你可以在这里下载到本文代码
芳仔说:
虽说 swift 可以与 OC 混编,但是这是在独立文件的基础上的,意味着你可以如上文中讲述的一样,互相调用,但是不可以在 swift 中书写 OC 的代码,或是在 OC 的文件中书写 swift 的语法,Have Fun, iOSers!