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
相关产品推荐
相关产品推荐

