2017-10-12 48 views
-5

我是新來的Swift並試圖移植一些代碼。我有這樣一箇舊項目:Swift(4)中的簡單結構初始化?

typedef struct { 
    float Position[3]; 
    float Normal[3]; 
    float TexCoord[2]; // New 
} iconVertex; 

const iconVertex iconVertices[] = { 
    {{0.0,0.0, 0.0}, {0, 0, 1.0}, {0, 0}}, 
    {{1.0, 0.0, 0.0}, {0, 0, 1.0}, {1, 0}}, 
    {{0.0, 1.0, 0.0}, {0, 0, 1.0}, {0, 1}}, 
    {{1.0, 1.0, 0.0}, {0, 0, 1.0}, {1, 1}}, 
}; 

有沒有辦法在Swift中做同樣的數組初始化? 謝謝!

回答

1

在Swift中,您可以使用Structs定義對象並創建一個接收需要初始化的參數的init方法。

struct IconVertex { 
    var position: [Double] 
    var normal: [Double] 
    var textCoord: [Double] 

    init(position: [Double], normal: [Double], textCoord: [Double]) { 
     self.position = position 
     self.normal = normal 
     self.textCoord = textCoord 
    } 
} 

let iconVertices: [IconVertex] = [ 
IconVertex(position: [0.0,0.0, 0.0], normal: [0, 0, 1.0], textCoord: [0, 0]), 
IconVertex(position: [1.0, 0.0, 0.0], normal: [0, 0, 1.0], textCoord: [1, 0]), 
IconVertex(position: [0.0, 1.0, 0.0], normal: [0, 0, 1.0], textCoord: [0, 1]), 
IconVertex(position: [1.0, 1.0, 0.0], normal: [0, 0, 1.0], textCoord: [1, 1])] 
+5

你不需要'init'。如果你沒有提供其他的'struct',你會自動獲得這樣的'init'。 – rmaddy

+0

好點!但是因爲他正在移植一些代碼,所以我認爲這對於顯示如何創建'init'也很有用 – jvrmed

+0

可能想要使用Vector3D或元組而不是數組作爲屬性類型。 –