2026 March 17 Swift
Swift第十四章 Swift 源码简介
Swift 源码简介
- Swift于2015年正式开源,github地址: https://github.com/apple/swift
- 几个可能会经常看的目录
- docs:一些文档
- stdlib:Swift源码
- lib:C++源码
- include:C++头文件
- 标准库源码位置:
https://github.com/apple/swift/tree/master/stdlib/public/core,比如想看一下Array源码实现
Array、SubString、Optional分析(略)
Matadata
- 实例内存结构:一个实例对象前8个字节指向matadata,其次8个字节是引用计数器,然后才是成员存储
- 那么matadata里面放的是什么呢?
- 不同类型有不同的matadata:枚举、结构体、类、协议、函数、元组
- Swift5.0说的ABI稳定指的就是matadata存储内容稳定
- 参考文档:https://github.com/apple/swift/blob/master/docs/ABI/TypeMetadata.rst,里面详细说明了每种matadata里面存储了什么。
- 其他参考
- https://github.com/apple/swift/blob/master/include/swift/ABI/Metadata.h
- https://github.com/apple/swift/blob/master/include/swift/ABI/MetadataKind.def
- https://github.com/apple/swift/blob/master/include/swift/ABI/MetadataValues.h
- https://github.com/apple/swift/blob/master/include/swift/Reflection/Records.h
- 可以通过matadata找到类型的所有成员,即跟OC的runtime一样
- mj用swift写了一个类似mjextion库,叫KakaJSON
反射
- 反射是编程语言中一项强大的能力,比如java语言的反射机制
- 对于任意一个类型,都能够动态获取这个类的所有属性和方法信息
- 对于任意一个实例,都能够动态调用它的任意方法和属性
- Swift的反射机制目前还比较弱,通过 Mirror 类型来提供简单的反射功能
项目演练
- 新建一个Swift项目TestQiuShi
- 在目录下新建一个文件夹Resource
- 然后将info.plist、LaunchScreen.storyboard、Assets.xcassets、Main.storyboard全部拖拽至Resource文件夹中
- 然后进入Build settings 搜索info.plst->packaging->info.plist file,修改右边路径为:
TestQiuShi/Resource/Info.plist
常用的三方库
- 网络请求:
https://github.com/Alamofire/Alamofire - 图片下载:
https://github.com/onevcat/Kingfisher - JSON访问:
https://github.com/SwiftyJsON/SwiftyJSON - JSON-Model转换:
https://github.com/kakaopensource/KakaJSON