swift和oc的区别

387 阅读1分钟
  1. 编程范式

    swift可以面向协议编程、函数式编程、面向对象编程

   OC面向对象,可以引入RectiveCocoa的类库来进行函数式编程

  2.类型安全

   swift是类型安全的语言,在编译的时候做类型检查

   OC不是类型安全的语言,声明一个NSString变量,但依然可以传NSNumber给它

3.值类型增强

swift中,struct、enum以及tuple都是值类型,平时使用的Int、Double、Float、String、Array、Dictionary、Set都是结构体实现的,也是值类型

OC中,NSNumber、NSString及集合对象都是指针类型

4.泛型

Switt中支持泛型,也支持泛型的类型约束等特性。

 苹果推出了Swift2.0版本,为了让开发者从Objective-C更好地过渡到Swift上, 苹果也为Objective-C带来了Generics泛型支持,不过Objective-C的泛型约束也 仅停留在编译器警告阶段。 

5.协议和扩展

 Switt对协议的支持更加丰富,配合扩展(extension)、泛型、关联类型等可以实现面 向协议编程,从而大大提高代码的灵活性。同时,Swift中的protocol还可以用于值类 型,如结构体和枚举。

 Objective-C的协议缺乏强约束,提供的optional特性往往成为很多问题的来源,而如 果放弃optional又会让实现代价过大。 

6.函数和闭包

Swift函数是一等公民,可以直接定义函数类型变量,可以作为其他函数参数传递, 可以作为函数返回值返回。

 Objective-C里面函数仍然是次等公民,需要selector封装或者使用block才能模拟 Swift中类似的效果。