Сохраните значение SCNVector3 с UserDefaults в Swift

Я пытаюсь сохранить и загрузить SCNVector3это код, который я использую для сохранения и загрузки вектора:

//Definition of the two vectors
let storedVector = SNCVector3Make(0,0,0)
let vector = SNCVector3Make(1,1,1)

let defaults = UserDefaults.standard

//Saving the vector
defaults.set(vector, forKey: "storedVector")

//Loading the vector into storedVector variable if already saved
let storedVector = defaults.object(forKey: "storedVector") as? SCNVector3 ?? storedVector

Я должен проверить, сохранено ли значение, потому что я сохраняю значение одним нажатием кнопки и загружаю его при загрузке приложения.

Проблема в том, что при сохранении вектора происходит сбой приложения.
Однако, если я разделю вектор на три числа с плавающей точкой, как это:

defaults.set(vector.x, forKey: "storedVectorx")
defaults.set(vector.y, forKey: "storedVectory")
defaults.set(vector.z, forKey: "storedVectorz")

а затем загрузить их так:

storedVector.x = defaults.float(forKey: "storedVectorx")
storedVector.y = defaults.float(forKey: "storedVectory")
storedVector.z = defaults.float(forKey: "storedVectorz")

приложение не падает.

Можно ли сохранить вектор без сбоев приложения и без разделения его на 3 числа?

1 ответ

Решение

Вы не можете сохранить SCNVector3 возражать непосредственно UserDefaults, Для более короткого решения вы можете сохранить векторные значения в виде массива или словаря.

let vectorArray = [vector.x, vector.y, vector.z]
UserDefaults.standard.set(vectorArray, forKey: "storedVector")

let vectorDict = ["x": vector.x, "y": vector.y, "z": vector.z]
UserDefaults.standard.set(vectorDict, forKey: "storedVector")
Другие вопросы по тегам