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

Playground Book跨页面共享类成员变量问题咨询

解决Playground Book跨页面访问类成员变量的问题

你遇到的问题主要出在两个关键点:类名拼写错误和跨页面实例不共享,咱们一步步来搞定:

1. 先修正类名拼写问题

你在Data.swift里定义的类是GlobalVars(注意末尾的s),但在Contents.swift里调用时写成了GlobalVar(),少了一个s,这会直接导致编译错误,先把这个小问题改过来。

2. 核心解决:让实例跨页面共享

Playground Book的每个页面是独立的执行上下文,如果每次都新建GlobalVars实例,第2页的对象和第1页的完全不是同一个,自然拿不到之前设置的值。最靠谱的方式是用单例模式,确保整个Playground里只有一个全局实例。

修改你的Data.swift代码

public class GlobalVars {
    // 创建全局唯一的单例实例
    public static let shared = GlobalVars()
    
    public var progress = Float()
    public var didComplete = Bool()
    
    // 私有化初始化方法,禁止外部创建新实例
    private init() {}
}

在第1页设置变量

// 通过单例实例设置变量
GlobalVars.shared.progress = 1.0
GlobalVars.shared.didComplete = true

在第2页访问变量

// 同样通过单例实例,就能拿到第1页设置好的值
print(GlobalVars.shared.progress) // 输出:1.0
print(GlobalVars.shared.didComplete) // 输出:true

额外小提示

  • 确保Data.swift确实放在Playground Book的Sources目录下,这个目录里的代码会自动导入到所有页面的上下文里。
  • 如果还是遇到访问问题,可以尝试重启Playground Book,或者重新添加Data.swift文件,确保Playground正确识别了Sources里的代码。
  • 你尝试的可选类型写法(public var progress:Float?)本身没问题,但解决不了跨页面实例不共享的核心问题,还是要结合单例来用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:59