Swift Foundation第5747行定义public typealias ObservableObject = ObservableObject的原因?
该类型别名的作用说明
这是Swift生态中非常常见的模块符号重导出技巧,看起来无用的定义实际承载了降低开发者使用成本的作用:
ObservableObject原本是Combine框架中定义的公开协议,并不属于Foundation原生的类型体系- 大量基于Foundation开发的业务项目、第三方库都有使用
ObservableObject的需求,在没有这个别名之前,开发者必须同时导入Foundation和Combine两个框架才能正常使用该协议,使用路径非常繁琐 - 这种
public typealias ObservableObject = ObservableObject的写法,本质是Foundation框架把Combine框架的ObservableObject符号公开转发给了自身的调用方:只要开发者导入了Foundation,就可以直接使用ObservableObject协议,不需要额外手动导入Combine - 除此之外这个别名还承担了版本兼容的作用:如果后续Apple对
ObservableObject的归属做调整、或者需要在不支持Combine的系统版本做兼容降级,只需要修改Foundation中的这个别名定义即可,上层开发者的调用代码不需要做任何修改,兼容性成本极低
对应源码定义如下:
public typealias ObservableObject = ObservableObject
内容的提问来源于stack exchange,提问作者Iceland
相关产品推荐
相关产品推荐

