2014-07-08 33 views
11

因此,我正在使用Ray Wenderlich的一個叫做iOS Games的書,並嘗試利用在那裏發現的一些Objective-C代碼來對我的遊戲中的角色進行加速計控制。不過,我想用Swift來代替Objective-C。當我嘗試創建一個代表3D矢量的GLKVector3類型的變量時遇到了一個問題。當我鍵入:在Swift中使用GLKit中的GLKMath

var raw:GLKVector3 = GLKVector3Make(irrelevant stuff) 

我得到以下錯誤:

使用模塊GLKVector3的類型。

我有我的SWIFT文件的頂部GLKit進口:

import GLKit 

任何想法如何,我可以從GLKMath文件獲取的功能在我的程序使用?

回答

8

Swift在版本1.2中增加了聯合支持。即使使用var聲明,導入的聯合中的字段也是隻讀的,但可以根據需要傳入和傳出C函數。

的雨燕1.2的發行說明暗示領域可能無法訪問所有,但他們仍然是可讀的,至少在GLKit類型:

Swift can now partially import C aggregates containing unions, bitfields, SIMD vector types, and other C language features that are not natively supported in Swift. The unsupported fields will not be accessible from Swift, but C and Objective-C APIs that have arguments and return values of these types can be used in Swift. This includes the Foundation NSDecimal type and the GLKit GLKVector and GLKMatrix types, among others.

+1

這是否意味着我根本不能使用GLKVector3? – DShaar

+3

據我所知,不是像今天這樣在斯威夫特。他們可能會在即將推出的版本中實施工會,但我沒有看到任何有關這方面的事情。 [提交bug報告!](https://bugreport.apple.com) –

+0

有關可能的解決方法(創建C函數),請參閱:http://stackoverflow.com/questions/8262004/converting-cgpoint-to-glkvector2 -in-objective-c假設接收者(框架,objc庫)已經實現了一個聯合。 – LearnCocos2D

3

昨天(2015年2月8日)發佈了測試版Xcode 6.3/Swift 1.2,現在可以使用Swift的GLKit了。

+1

任何想法如何通過GLKMatrices作爲制服?我試圖將其轉換爲UnsafePointer ,但沒有成功。會喜歡一些指針,因爲它! – Gusutafu

+1

@Gusutafu'VAR viewProj = GLKMatrix4Multiply(...) VAR的pData = uniformBuffer.contents() pData.advancedBy(的sizeof(GLKMatrix4)* inflightBufferIndex) 令地址= withUnsafePointer(viewProj){UnsafeMutablePointer ($ 0)} memcpy(pData,address,sizeof(GLKMatrix4))' – aoakenfo