在学习Swift

这段时间一直在学习 Swift 这门语言,平时闲暇时间都用来学习或思考人生了,所以这些天没怎么写东西。

经过这几天学习,发现 Swift 这门语言挺好的,你别说还挺喜欢。如果专注 Apple 生态开发,Swift 是绕不过去的「砍」。

如果这么说,让人感觉 Swift 是一道坎。这门语言学起来概念确实有点儿多,而且关键字也多,但是一旦掌握,代码写起来其实还挺舒服的。很多语法以及关键字的存在,是为了更好的代码阅读体验以及语言的安全性考虑。

关于应用场景,除了开发 Apple 家的 App,还可以做 Server 端的开发。据说去年开始,社区又衍生出了嵌入式的分支。作为独立开发者,对于中小型 Web 项目,Vapor 足够稳定,上手也简单,各种基础设施其实已经挺完善的了。只不过对于企业级的应用,可能相关配套设施还差一些,但这不仅仅是语言本身的问题了。按照现在的发展趋势,假以时日会越来越完善。

Swift 数据类型

Swift 的数据类型很有意思,即便是基本类型其实也是结构体。

值类型 枚举(enum) Optional
值类型 结构体(struct) Bool、Int、Float、Double、character、
String、Array、Dictionary、Set
引用类型(reference type) 类(class)
常见数据类型
  • 整数类型:Int8、Int16、Int32、Int64、UInt8、UInt16、UInt32、UInt64
  • 在32bit平台:Int 等价于 Int32;在 64bit 平台,Int 等价于 Int64
  • 整数的最值:UInt8.max、Int16.min
  • 一般情况下,建议直接使用 Int
  • 浮点类型:Float,32 位,精度只有 6 位;Double,64 位,精度至少 15 位

Swift 语言编译流程

Swift 这门语言编译器的后端是基于 LLVM 的,编译器的前端是 SwiftC,也就是指 Swift 的编译器。

Swift 编译器

Swift 编译器将 Swift 语言编译成 LLVM IR,也就是 LLVM 的中间语言,LLVM
的编译器后端编译成相应的 CPU 可执行文件。

关于 Swift 编译器的相关文档,详情可参考 Swift Compiler 官方文档。

通常,SwiftC 存放在 Xcode 内部:

Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc

一些常见的操作如下:

  • 生成语法树:swiftc -dump-ast main.swift
  • 生成最简洁的 SIL 代码:swiftc -emit-sil main.swift
  • 生成 LLVM IR 代码:swiftc -emit-ir main.swift -o maiin.ll
  • 生成汇编代码:swiftc -emit-assembly main.swift -o main.s

Swift 的编译流程如下所示: