Swift iOS SceneKit Как безопасно кодировать SCNMatrix4 с помощью NSSecureCoding?

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

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

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

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

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

aDecoder.decodeFloat(forKey: "someKey")

Конечно нет?

Каков правильный способ безопасного кодирования этого?


person Geoff H    schedule 01.11.2018    source источник


Ответы (2)


Я предложил следующий способ, такой же, как в примерах 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.

person E.Coms    schedule 01.11.2018

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

person mnuages    schedule 03.11.2018