展开要打印的 SCNVector3/SCNVector4 个值?

Unwrapping SCNVector3/SCNVector4 values to print?

这应该是一个简单的问题

   import SceneKit
    import Accelerate

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

回答

vector C.SCNVector3

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

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

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

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

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

Swift2 的更新:在Swift2 中,默认打印结构 具有所有属性:

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]