Swift各版本的差异
Swift 2
error handing 增强 guard 语法 协议支持扩展
Swift 3
新的 GCD 和 Core Graphics NS 前缀从老的Foundation 类型中移除内联序列函数sequence 新增fileprivate 和open 两个权限控制 移除了诸多弃用的特性,比如++、-- 运算符等
Swift 4
extension 中可以访问 private 的属性类型和协议的组合类型 Associated Type 可以追加Where 约束语句新的 Key Paths 语法 下标支持泛型 字符串增强
Swift 5
ABI 稳定Raw strings 标准库新增 Result 定义了与Python 或Ruby 等脚本语言互操作的动态可调用类型
Swift与OC的主要区别
编程范式
Swift 可以面向协议编程、函数式编程、面向对象编程OC 以面向对象编程为主,当然你可以引入类似ReactiveCocoa 的类库来进行函数式编程
类型安全
Swift 是一门类型安全的语言。 鼓励程序员在代码中清楚明确值的类型。如果代码中使用一个字符串String ,那么你不能错误地传递一个整型Int 给它。因为Swift 是类型安全的,它会在代码编译的时候做类型检查,并且把所有不匹配的类型作为一个错误标记。这样使得程序员在开发中尽可能早地发现和修正错误。OC 中,你声明一个NSString 变量,仍然可以传一个NSNumber 给它,尽管编译器会抱怨,但是你仍然可以作为NSNumber 来使用它。
值类型增强
在Swift 中,典型的有struct 、enum 以及tuple 都是值类型。 平时使用的Int、Double、Float、String、Array、Dictionary、Set 其实都是用结构体实现的,也是值类型。 OC 中,NSNumber、NSString 以及集合类对象都是指针类型。
枚举增强
Swift 的枚举可以使用整型、浮点型、字符串等,还能拥有属性和方法,甚至支持泛型、协议、扩展等等。OC 里面的枚举则鸡肋很多。
泛型
Swift 中支持泛型,也支持泛型的类型约束等特性。苹果推出了Swift2.0 版本,为了让开发者从OC更好过渡到Swift 上,苹果也为OC 带来了Generics 泛型支持,不过OC 的泛型约束也仅停留在编译器警告阶段。
协议和扩展
Swift 对协议的支持更加丰富,配合扩展(extension )、泛型、关联类型等可以实现面向协议编程,从而大大提高代码的灵活性。同时,Swift 中的protocol 还可以用于值类型,如结构体和枚举。OC 的协议缺乏强约束,提供的optional 特性往往成为很多问题的来源,而如果放弃optional 又会让实现代价过大。
//类定义
class Person
{
var name:String
var age:Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
}
//扩展 要有返回值
extension Person : CustomStringConvertible
{
var description: String
{
get{
return "\(name) age \(age)"
}
}
}
let zhangsan = Person(name: "666", age: 30)
函数和闭包
Swift 函数是一等公民,可以直接定义函数类型变量,可以作为其他函数参数传递,可以作为函数返回值返回。OC 里面函数仍然是次等公民,需要selector 封装或者使用block 才能模拟Swift 中类似的效果。
func addTwoNum (num1:Int,num2:Int) -> Int
{
return num1+num2
}
let sum = addTwoNum(num1: 1, num2: 2)
print(sum)