一、概况
二、基本语法
1、swift是类型安全的语言
2、swift中的数据类型
3、闭包
4、元组类型和多个返回值
5、defer语句、guard语句、fallthrough语句
一、概况
1、swift语言是一门现代化的工业编程语言,吸取了C、OC、JavaScript、Python等语言的精华
1)、支持指针;支持结构体和枚举,并且更加强大
2)、基于cocoa和cocoa touch框架,swift与OC可以轻易的转换
类型的转换:OC <--->Swift
方法的转换:
OC:
Swift:
3)、代码看起来像脚本语言,更加接近自然语言,让JavaScript,Java,Python,C#,以及 C++ 的开发者更加容易入门
如使用repeat更自然语言:
2、swift语言支持多种编程范式
1)、面向过程编程
2)、面向对象编程
3)、函数式编程
4)、面向协议编程
5)、面向泛型编程
编程范式越多,说明能解决越多种类的问题,应用场景越多。
以下简单介绍几种范式:
3、swift是更加安全的语言
1)、swift是类型安全的语言
下面介绍。
2)、swift自动支持ARC
4、Swift的其他优势(他人观点)
中文: http://www.oschina.net/translate/swift-vs-objective-c-10-reasons-the-future-favors-swift
英文:http://www.pcadvisor.co.uk/news/software/swift-vs-objective-c-10-reasons-the-future-favors-swift-3611295/
二、基本语法
1、swift是类型安全的语言
1)、swift是静态语言,在编译时就知道数据类型
a)、在初始化时指定类型
不过没有初始化或者赋值的变量/常量,无法被调用,否则会产生编译错误:Variable 'item2' used before being initialized
b)、在初始化时不指定类型,会进行类型推导
c)、数据类型唯一,一旦确定后,无法改变成其他类型
左:OC 右:Swift
d)、不支持隐式类型转换
2)、可选类型、可选链
先看一种nil的情况:
在OC中,有以下三个嵌套类。另一个图是调用,什么事情都会不发生. 表达式或者一行操作变成了一项空操作(no-operation (no-op)), 而这就使得其看起来会有不会奔溃的好处, 但其实它已经变成了一个巨大的bug来源. no-op 会导致不可预测的行为。
而在Swift中,如果变量没有被初始化被调用,会报编译错误,这样在编码期间就杜绝了上面说的风险。
这里就引入了可选类型,来解决这个问题:如果变量为nil,则后面的操作不会
可选链:在emp.dep?.com?.name这样多个环节中使用可选类型?的方式就是可选链。
3)、拆包
强制拆包:如果确定可选类型一定有值,在调用变量时,用!来代替可选获取可选类型变量的值。
隐式拆包:在声明可选类型时,将?号变成!号,那么在调用时,可以不加?或者!。
实际上,在编码过程中,Xcode会自动提示你怎么加?或者!
4)、可选绑定
可选类型被区分为有值和nil,可以用来if判断:
可选类型在if或者while语句中赋值并进行判断的写法,叫可选绑定。
5)、类型检查与转换
a)、is操作符可以用来判断一个实例是否为某个类的类型
b)、AnyObject可以表示任何类的实例;Any可以表示任何类型
b)、as操作符奖一个变量转换为目标类型,如果转化成功,则转换,否则返回nil
2、swift中的数据类型
1)、两种类型:
值类型:
在赋值或者传参时,创建一个副本,把副本传过去,不影响原始数据。
包括:整型、浮点型、布尔型、字符串、元组、集合、枚举、结构体
引用类型:
在赋值或者传参时,把自身传过去,会影响原始数据。
包括:类
上例中:
a)、第199行定义了泛型函数;
b)、当传人引用类型时,通过229和231行比较,发现对象的属性发生了变化;
c)、当传人值类型时,未调用之前就报编译错误,值类型参数无法在函数内发生改变。
2)、inout可以让值类型在函数作为参数时被修改
注:调用inout修饰的函数,参数前要加上&
3、闭包
在swift中闭包有三种实现方式:
1)、全局函数
2)、嵌套函数
3)、闭包表达式
语法:
{ (参数列表) -> 返回值类型 } in
}
4)、两个类之间通信举例
4、元组类型和多个返回值
5、defer语句、guard语句、fallthrough语句
defer表示延迟执行,后面跟{},其中包含一些操作,会被压栈,在函数执行完毕后再出栈,执行{}
guard语句跟if类似,判断一个条件是否为期望的,否则执行后面else中的语句
利用guard语句改写,让代码更加合理、清晰
fallthrough语句是贯通语句,在switch语句中,让原本不能贯通case的情况实现贯通
首先说明,swift中switch中没有break,但是不加break,进入swtich的条件也只会执行1个case,不会往下执行。
a)、j=1,首先进入case 1,i变成2
b)、因为case 1 中有fallthrough,进入case 2
c)、在case 2 中,i变成3,进入case 3
d)、在case 3 中,i变成4,这里没有fallthrough,虽然没有break,但是会跳出switch
最后 i == 4