Как передать данные со страницы игровой площадки на другую страницу игровой площадки в Swift Playgrounds?

Я делаю PlaygroundBook для игровых площадок Swift [не игровых площадок Xcode]. Я хочу передавать данные между страницами игровой площадки. Например, у меня есть общедоступная переменная в UserModule, и ее значение равно 0. На первой странице пользователь изменяет эту переменную на 1. Когда пользователь переходит на вторую страницу, значение переменной равно 0. Но я хочу, чтобы ее значение было значением пользователя (1). Как я могу это сделать?

Я использую SwiftUI. Я пытался использовать UserDefaults, но UserDefaults не будет работать на Swift Playgrounds. А также попробуйте сохранить данные в файл JSON, но Playground не будет записывать файлы (только читать). Я также пробовал это, но это тоже не работает.


person Alperen Örence    schedule 13.04.2021    source источник


Ответы (1)


Вам следует использовать PlaygroundKeyValueStore. Это работает аналогично UserDefaults, но на игровых площадках. Имейте в виду, что он работает только с PlaygroundValue, поэтому вам придется обернуть ваша ценность.

Вы можете сделать что-то вроде:

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;
person Vinícius Bonemer    schedule 16.04.2021