从现在,开始swift

导语

苹果在2014的WWDC中推出了Swift 这一全新的编程语言,一时之间成为各大网站的头条和所有程序员的讨论热点,与可读性较差的Objective-C相比,这门融合了多种编程语言优点的语言得到了各大编程语言开发者的认可,并迫不及待想要学习这门全新的语言,而成为一名掌握iOS开发平台的程序员。

但是,还有一群人在暗自神伤,就是我们这群被Apple虐了千万遍,我们却待它如初恋的iOS开发者

  • “唉,一大波抢饭碗的人正在靠近”
  • “赶紧去学,不然就跟不上时代了啊”
  • “以前的代码怎么办,以前的类库怎么办”
  • “不学。我继续用的Objective-C”
  • ……

但是你还在五内郁结,已经有大把的开发者从发布的那天起就开始了swift之旅,而事实证明,这是一门优秀地语言,与OC可以完美结合,所以,你还在等什么,不要等到下一个正式项目,就是现在,不管你是新手还是老鸟,在做demo还是做正式项目,就是下一次 command + N,选择swift!

关于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

替换为以下代码

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!

时间: 2024-10-20 12:46:41

从现在,开始swift的相关文章

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

swift 深入理解Swift的闭包

我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值 var str="JobDeer" 还可以用闭包的方式定义: var str:String={ return "JobDeer" }() 闭包还可以这么定义,省略了等号和括号: var str:String{ return "JobDeer" } 闭包中可以定义get方法. var str:String{ get{ return

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

Swift学习之位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift语言里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 //位移枚举typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutores

Swift - 用UIScrollView实现视差动画效果

效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoView.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class MoreInfoView: UIView { var imageV

Swift 入门之简单语法(一)

定义 let 定义常量,一经赋值不允许再修改 var 定义变量,赋值之后仍然可以修改 //: # 常量 //: 定义常量并且直接设置数值 let x = 20 //: 常量数值一经设置,不能修改,以下代码会报错 // x = 30 //: 使用 `: 类型`,仅仅只定义类型,而没有设置数值 let x1: Int //: 常量有一次设置数值的机会,以下代码没有问题,因为 x1 还没有被设置数值 x1 = 30 //: 一旦设置了数值之后,则不能再次修改,以下代码会报错,因为 x1 已经被设置了数

Swift和Java关于字符串和字符的比较

1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是由双引号 ("") 包裹着的具有固定顺序的文本字符集.字符串字面量可以用于为常量和变量提供初始值. 代码如下: let someString = "Some string literal value" 字符串字面量可以包含以下特殊字符: 转义字符\0(空字符).\\(反

Swift Tour

设置常数使用let,设置变量使用var var myVariable = 42 myVariable = 50 let myConstant = 42 编译器可以自己推断出变量类型因此不用显式限定. 如果没有赋初值或信息不足以让编译器判断,则可以通过冒号显式声明: let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Double = 70 任何变量类型都不可以隐式转换,所有变量之间的转换都为显式: let

Swift备忘录

Swift 备忘录 2015-4 一.简介 1.Swift 语言由苹果公司在2010年7月开始设计,在 2014 年6月推出,在 2015 年 12 月 3 日开源 2.特点(官方): (1)苹果宣称 Swift 的特点是:快速.现代.安全.互动,而且明显优于 Objective-C 语言 (2)可以使用现有的 Cocoa 和 Cocoa Touch 框架 (3)Swift 取消了 Objective-C 的指针及其他不安全访问的使用 (4)舍弃 Objective-C 早期应用 Smallta

Swift -- 语言指南--高级运算符

原文地址: http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算. 不同于C语言中的数值计算,Swift的数值计算默认是不可溢出的.溢出行为会被捕获并报告为错误.你是故意的?好吧,你可以使用Swift为你准备的另一套默认允许溢出的数值运算符,如可溢出加&+.所有允许溢出的运算符都是以&开始的. 自定义的结构,类和枚举,是否可