You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承Swift Package自定义类后AppDelegate常量为何为空?

问题原因解析

这跟苹果对Swift Package的内存分配机制无关,核心是跨模块类的初始化时机差异,具体细节如下:

  • 先明确两个关键字的本质区别:let定义的存储属性必须在类实例的初始化阶段完成赋值;而lazy var定义的属性,赋值逻辑会延迟到该属性第一次被访问时才执行。
  • 当AppDelegate继承Swift Package中的CustomSwiftPackageDelegate时,UIKit会在App启动阶段自动实例化AppDelegate。这个过程中,主App模块的初始化优先级高于Swift Package模块,导致父类(位于Package中)的let属性在实例化时,所在模块的静态初始化流程还没完全走完,属性没有被正确赋值,所以控制台打印为空。
  • 改成lazy var后,属性的赋值逻辑被延迟到第一次访问时执行,此时Swift Package模块已经完成初始化,自然能拿到正确的"test"值。
  • 而当父类与AppDelegate在同一模块,或者直接继承系统自带的UIResponder/UIApplicationDelegate时,不存在跨模块的初始化顺序冲突,let属性能在实例化阶段正常完成赋值,所以打印结果正常。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:00:01