展开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]