2017-09-08 46 views
0

這個代碼在夫特等效SCNVector3的當量:SceneKit:(,0 0,0)的目標C

startNode.scale = SCNVector3(1/100.0, 1/100.0, 1/100.0) 

是:

[startNode setScale: SCNVector3Make(1/100.0, 1/100.0, 1/100.0)]; 
在Objective-C

SCNVector3應該被替換爲SCNVector3Make似乎很奇怪。爲什麼是這樣?

謝謝!

+0

那麼SCNVector3和SCNVector3Make在Swift中嚴格等價嗎? –

回答

1

可以在Swift中使用SCNVector3Make(x, y, z)SCNVector3(x, y, z)

後來的確在語義上很奇怪,但他們是相同的

+0

爲什麼這很奇怪?它遵循C函數API到Swift API之間轉換的所有命名標準。 – user28434

+0

@ user28434簽出'CGPoint'或'CGRect'的初始化程序;它們都有外部參數名稱,與'SCNVector3(x,y,z)'不同。 – the4kman

+0

確實。雖然'SCNVector3'也有'Float'的Swift初始化參數。但我認爲OP在想,爲什麼在Objective C中'SCNVector3'是'SCNVector3Make',而不是爲什麼沒有參數名稱。 – user28434

1

兩者都是一樣的,只是名稱不同而且都是因爲Apple C/ObjC框架和Swift代碼中的命名規則不同。


這將是更好地展示它是如何工作的例子:

假設我們正在創建框架SomeFrameworkSF會再命名空間前綴),並在上述框架內,我們將有類型Example,前綴這將是SFExample

C的命名約定表示我們類型爲SFExample的構造函數應該被稱爲SFExampleMake

Swift的命名規則是說構造函數應該是SFExample.init,它可以被稱爲SFExample(…)

而當你在你的斯威夫特項目中導入ObjC/C框架還有的namecast,輪流SFExampleMakeSFExample.initSCNVector3MakeSCNVector3.init幕後。