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

时间:2015-03-05 18:37:52

标签: ios swift scenekit

这应该是一个简单的问题

   import SceneKit
    import Accelerate

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

答案

vector C.SCNVector3

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

2 个答案:

答案 0 :(得分:4)

更新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]

答案 1 :(得分:2)

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

由于此结构不能为您执行此操作,因此请单独打印每个组件:

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

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