Swift iOS SceneKit Как безопасно кодировать SCNMatrix4 с помощью NSSecureCoding? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь безопасно закодировать SceneKit SCNMatrix4, чтобы он соответствовал NSSecureCoding с чем-то похожим на следующее:

if let transform = aDecoder.decodeObject(of: SCNMatrix4.self, forKey: DATA_KEY_TRANSFORM) {
    self.transform = transform            
}

Но это выдает ошибку компиляции:

Невозможно преобразовать значение типа 'SCNMatrix4.Type' в ожидаемый аргумент введите '[AnyClass]?' (он же необязательный>)

Очевидно, что SCNMatrix4 не является объектом и является причиной, почему это не работает, но, конечно, мне не нужно проходить через каждый из 16 Float s в SCNMatrix4 и кодировать каждый с:

aDecoder.decodeFloat(forKey: "someKey")

Конечно, нет?

Как правильно кодировать это?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Кодирование потребует от вас сначала обернуть матрицу в NSValue, а затем развернуть ее. См. init(scnMatrix4:) и scnMatrix4Value.

0 голосов
/ 01 ноября 2018

Я предложил один из следующих способов, как и в примерах swiftShot:

SCNMatrix4 = SCNMatrix.init(float4x4)

float4x4 <= self.column[0] = float4

self.column[1] = float4
self.column[2] = float4
self.column[3] =  float4

float4 <= with_4_Float.

...