swift初探(一)

172 阅读1分钟

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中类似效果

编译过程

image.png image.png

生成可执行文件: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