如何将数据从一个 Playground 页面传递到 Swift Playgrounds 中的另一个 Playground 页面?

How can I pass data from a Playground Page to another Playground Page in Swift Playgrounds?

我正在为 Swift Playgrounds [不是 Xcode Playgrounds] 制作 PlaygroundBook。我想在游乐场页面之间传递数据。例如,我在 UserModule 中有一个 public 变量,它的值为 0。在第一页,用户将此变量更改为 1。当用户转到第二页时,变量的值为 0。但我希望它的值为用户的值(1).我该怎么做?

我正在使用 SwiftUI。我尝试使用 UserDefaults,但 UserDefaults 在 Swift Playgrounds 中无法正常工作。并尝试将数据保存到 JSON 文件,但 Playground 不会写入文件(只能读取)。我也试过 this 但还是不行。

您需要使用 PlaygroundKeyValueStore. This works similar to UserDefaults, but on playgrounds. Keep in mind that it only deals with PlaygroundValues,因此您必须包装您的值。

您可以这样做:

public var myVariable = 0 {
    didSet {
        PlaygroundKeyValueStore.current.keyValueStore["myKey"] = .integer(myVariable)
    }
}

然后,在另一个页面上,您可以通过以下方式检索值:

guard let keyValue = PlaygroundKeyValueStore.current.keyValueStore["myKey"],
    case .integer(let storedValue) = keyValue else {
    // Deal with absence of value
}
// Use retrieved value

例如,您可能还应该将密钥存储在枚举中,以避免输入错误。

enum StoredVariableKeys: String {
    case myVariable1
    /* ... */
}

并将此值用作您的密钥,例如

let myKey = StoredVariableKeys.myVariable1.rawValue;