swift与Objecive-C主要特性对比
-
编程范式
- swift可以面向协议编程、函数式编程、面向对象编程
- Objective-C以面向对象编程为主
-
类型安全
- swift编译时做类型检查 比如string声明,不能用int赋值
- Objective-C 编译器不会报错
-
值类型增强
- swift中,struct、enum、tuple都是值类型。Int、Double、Float、String、Array、Dictionry、Set也是值类型,使用结构体实现
- Objective-C中,NSNumber、NSString以及集合类对象都是指针类型
-
枚举增强
- 枚举可以使用整形、浮点、字符串等,还能拥有属性和方法,甚至支持泛型、协议、扩展等
-
泛型
- swift中泛型支持类型约束等
- Objective-C泛型约束仅支持编译器警告
-
协议和扩展
- swift对协议支持更加丰富,配合扩展(extension)、泛型、关联类型等可以实现面向协议编程。同时,protocol可以用于值类型,比如结构体和枚举
- Objective-C 协议有optional特性,缺乏强约束
-
函数和闭包
- swift中,可以直接定义函数类型变量,可以作为参数或返回值
- Objective-C中需要selector封装或者使用block才能模拟swift中类似效果
编译过程
生成可执行文件:swiftc -o SwiftTest.out SwiftTest.swift
生成抽象语法树AST:swiftc SwiftTest.swift -dump-ast
生成SIL:swiftc SwiftTest.swift -emit-sil
生成IR:swiftc SwiftTest.swift -emit-ir
生成汇编:swiftc SwiftTest.swift -emit-assembly