展开SCNVector3 / SCNVector4值以进行打印?

这应该是一个简单的问题

import SceneKit import Accelerate var str:SCNVector3 = SCNVector3Make(1, 2, -8) println("vector \(str)" 

回答

 vector C.SCNVector3 

如何打开并显示像[1,2,-8]这样的矢量?

更新Swift 2:在Swift 2中,默认情况下使用所有属性打印结构:

 let str = SCNVector3Make(1, 2, -8) print("vector \(str)") // Output: // vector SCNVector3(x: 1.0, y: 2.0, z: -8.0) 

您可以通过采用CustomStringConvertible协议自定义输出:

 extension SCNVector3 : CustomStringConvertible { public var description: String { return "[\(x), \(y), \(z)]" } } let str = SCNVector3Make(1, 2, -8) print("vector \(str)") // Output: // vector [1.0, 2.0, -8.0] 

上一个答案:

正如Eric已经解释过的那样, println()检查对象是否符合Printable协议。 您可以使用自定义扩展名为SCNVector3添加一致性:

 extension SCNVector3 : Printable { public var description: String { return "[\(self.x), \(self.y), \(self.z)]" } } var str = SCNVector3Make(1, 2, -8) println("vector \(str)") // Output: // vector [1.0, 2.0, -8.0] 

如果你去看看SCNVector3的定义,你会看到它的结构,并没有任何方法可以像你想要的那样打印得很好。 Swift中打印出描述的结构符合Printable协议。

由于此结构不适合您,因此请单独打印每个组件:

 println("Vector: [\(str.x), \(str.y), \(str.z)]") 

输出:矢量:[1.0,2.0,-8.0]