2016-11-27 11 views
1

基本的に、Vector3という新しいデータ型を作成しています。Swift 3の初期値の取得

class Vector3 { 

var x:Int 
var y:Int 
var z:Int 


init(x:Int,y:Int,z:Int) { 
    self.x = x 
    self.y = y 
    self.z = z 
    } 

} 

カスタムデータ型で演算子を使用するために、Swiftの演算子オーバーロード機能を使用しました。クラス名のみで、初期値がなければ

Vector3 

infix operator + 

func +(left:Vector3,right:Vector3) -> Vector3 { 
return (Vector3(x: left.x + right.x, y: left.y + right.y, z: left.z +  right.z)) 
} 

var customVector = Vector3(x: 1, y: 2, z: 3) 
var secondVector = Vector3(x: 3, y: 2, z: 1) 

print(customVector + secondVector) //Take note 

現在のコンソールは次のように印刷されます。

しかし、私が欲しいのは、このようなものを印刷することである:

Vector3(x:4,y:4,z:4) 

がうまくいけば、誰かがこれで私を助けることができます!ありがとう!

注:クラス名のみで、初期値なしVector3:現在のコンソールは次のように印刷され

customVector.x //1 
customVector.y //2 
+1

'Vector3'が本当に値型ではなく、参照型でなければなりません。ただそれを 'struct'にするだけで、あなたは自由に欲しい印刷物を手に入れることができます。 – Hamish

+0

関連:http://stackoverflow.com/questions/24068506/how-can-i-change-the-textual-representation-displayed-for-a-type-in​​-swift、http://stackoverflow.com/questions/28885254/unwrapping-scnvector3-scnvector4-values-to-print –

答えて

3

:私は1つのことで、これらのプロパティの値を得ることができることを十分に承知しています。

これは、文字列として解釈したときに、インスタンスをどのくらい正確に印刷するかをSwiftに指示しなかったためです。 CustomStringConvertibleプロトコルにクラスが準拠してください、あなたが必要なものを印刷するdescriptionを実装:

class Vector3 : CustomStringConvertible { 
    ... 
    public var description: String { 
     return "Vector3(x:\(x),y:\(y),z:\(z))" 
    } 
} 
関連する問題