Swift第十四章 Swift 源码简介

Swift 源码简介

  1. Swift于2015年正式开源,github地址: https://github.com/apple/swift
  2. 几个可能会经常看的目录
    1. docs:一些文档
    2. stdlib:Swift源码
    3. lib:C++源码
    4. include:C++头文件
  3. 标准库源码位置:https://github.com/apple/swift/tree/master/stdlib/public/core,比如想看一下Array源码实现

Array、SubString、Optional分析(略)

Matadata

  1. 实例内存结构:一个实例对象前8个字节指向matadata,其次8个字节是引用计数器,然后才是成员存储
  2. 那么matadata里面放的是什么呢?
    1. 不同类型有不同的matadata:枚举、结构体、类、协议、函数、元组
    2. Swift5.0说的ABI稳定指的就是matadata存储内容稳定
    3. 参考文档:https://github.com/apple/swift/blob/master/docs/ABI/TypeMetadata.rst,里面详细说明了每种matadata里面存储了什么。
    4. 其他参考
      1. https://github.com/apple/swift/blob/master/include/swift/ABI/Metadata.h
      2. https://github.com/apple/swift/blob/master/include/swift/ABI/MetadataKind.def
      3. https://github.com/apple/swift/blob/master/include/swift/ABI/MetadataValues.h
      4. https://github.com/apple/swift/blob/master/include/swift/Reflection/Records.h
    5. 可以通过matadata找到类型的所有成员,即跟OC的runtime一样
  3. mj用swift写了一个类似mjextion库,叫KakaJSON

反射

  1. 反射是编程语言中一项强大的能力,比如java语言的反射机制
    1. 对于任意一个类型,都能够动态获取这个类的所有属性和方法信息
    2. 对于任意一个实例,都能够动态调用它的任意方法和属性
  2. Swift的反射机制目前还比较弱,通过 Mirror 类型来提供简单的反射功能

项目演练

  1. 新建一个Swift项目TestQiuShi
    1. 在目录下新建一个文件夹Resource
    2. 然后将info.plist、LaunchScreen.storyboard、Assets.xcassets、Main.storyboard全部拖拽至Resource文件夹中
    3. 然后进入Build settings 搜索info.plst->packaging->info.plist file,修改右边路径为: TestQiuShi/Resource/Info.plist

常用的三方库

  1. 网络请求:https://github.com/Alamofire/Alamofire
  2. 图片下载: https://github.com/onevcat/Kingfisher
  3. JSON访问: https://github.com/SwiftyJsON/SwiftyJSON
  4. JSON-Model转换: https://github.com/kakaopensource/KakaJSON
Table of Contents