如何列印 NSValue 位元組?使用 print 時,它不會列印所有位元組并放入“...”。例如 {length = 128, bytes = 0x00000000 0000f03f 00000000 00000000 ... 00000000 0000f03f }
import Cocoa
import SceneKit
var identityMatrix = SCNMatrix4()
identityMatrix.m11 = 1
identityMatrix.m12 = 0
identityMatrix.m13 = 0
identityMatrix.m14 = 0
identityMatrix.m21 = 0
identityMatrix.m22 = 1
identityMatrix.m23 = 0
identityMatrix.m24 = 0
identityMatrix.m31 = 0
identityMatrix.m32 = 0
identityMatrix.m33 = 1
identityMatrix.m34 = 0
identityMatrix.m41 = 0
identityMatrix.m42 = 0
identityMatrix.m43 = 0
identityMatrix.m44 = 1
var a = [NSValue]()
a.append(NSValue(scnMatrix4:identityMatrix))
identityMatrix.m11 = 1
identityMatrix.m12 = 0
identityMatrix.m13 = 0
identityMatrix.m14 = 0
identityMatrix.m21 = 0
identityMatrix.m22 = 1
identityMatrix.m23 = 0
identityMatrix.m24 = 0
identityMatrix.m31 = 0
identityMatrix.m32 = 0
identityMatrix.m33 = 1
identityMatrix.m34 = 0
identityMatrix.m41 = 0
identityMatrix.m42 = -1.0
identityMatrix.m43 = 0
identityMatrix.m44 = 1
a.append(NSValue(scnMatrix4:identityMatrix))
print(a[0])
uj5u.com熱心網友回復:
首先,我們可以通過使用陣列字面量和SCNMatrix4初始化器來消除所有可變性來整理它:
import Cocoa
import SceneKit
let a = [
SCNMatrix4(
m11: 1, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 0, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: 0, m43: 0, m44: 1
),
SCNMatrix4(
m11: 1, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 1, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: -1, m43: 0, m44: 1
),
].map(NSValue.init(scnMatrix4:))
print(a[0])
這使得代碼更加合理。我們還可以從檔案中注意到,已經有一個常量可以用來獲取單位矩陣:
import Cocoa
import SceneKit
let a = [
SCNMatrix4Identity,
SCNMatrix4(
m11: 1, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 1, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: -1, m43: 0, m44: 1
),
].map(NSValue.init(scnMatrix4:))
print(a[0])
不清楚為什么這些矩陣包含在 中NSValue,但要顯示有關它們的詳細資訊(并對其呼叫其他方法),您需要NSValue使用scnMatrix4ValueAPI將矩陣取出開箱即用:
let sampleMatrix = a[0].scnMatrix4Value
print(sampleMatrix)
如果你想列印這些的位元組布局,(雖然現在還不清楚你為什么想要這個,因為 AFAICT,NSValue并且SCNMatrix4不對它們的記憶體布局做出承諾),你可以使用通常的指標 API,結合一些十六進制列印邏輯如此:
withUnsafeBytes(of: &sampleMatrix) { sampleMatrixPointer in
print(sampleMatrixPointer.map { String(format: "x", $0) }.joined(separator: ""))
}
印刷:
000000000000f03f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f03f0000000000000000000000000000000000000000000000000000000000000000000000000000f03f
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396583.html
