2014-07-08 15 views
11

Bu yüzden Ray Wenderlich'in eğitmenleri tarafından iOS Games adında bir kitap kullanıyorum ve oyun çalışmamda bir karakterin ivmeölçer kontrolünü yapmak için orada bulunan objektif-C kodunun bazılarını kullanmaya çalışıyorum. Ancak Objective-C yerine Swift'i kullanmak istiyorum. Bir 3B vektörünü temsil eden bir çeşit GLKVector3 oluşturmaya çalışırken bir sorunla karşılaştım. Ben yazarken: türü olarak modül GLKVector3 aitGLKit'in GLKit'ten Swift'i kullanması

kullanımını:

var raw:GLKVector3 = GLKVector3Make(irrelevant stuff) 

aşağıdaki hatayı alıyorum.

Ben GLKit benim hızlı dosyasının en üstünde bir ithalat:

import GLKit 

benim programda kullanmak üzere GLKMath dosyalarından işlevselliği almak nasıl herhangi bir fikir?

cevap

8

Swift, 1.2 sürümünde sendika desteği ekledi. İçe aktarılan birleşimdeki alanlar var ile bildirilmiş olsa bile salt okunurdur, ancak gerektiğinde C işlevlerine ve içinden geçirilebilir. Swift 1.2

sürüm notları alanlar hiç erişilebilir olmayabilir ima, ancak en az GLKit türleri için hala okunabilir: İşte

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

Bu, GLKVector3'ü kullanamadığım anlamına mı geliyor? – DShaar

+3

Anlatabildiğim kadarıyla, bugün olduğu gibi Swift'de değil. Sendikaları önümüzdeki bir sürümde uygulayabilirler, ancak bu konuda hiçbir şey görmedim. [Hata raporu verin!] (Https://bugreport.apple.com) –

+0

Olası bir geçici çözüm için (C işlevi oluşturun) bkz: http://stackoverflow.com/questions/8262004/converting-cgpoint-to-glkvector2 -in-objektif-c Alıcının (çerçeve, objc kütüphanesi) zaten bir birlik oluşturması şartıyla. – LearnCocos2D

2

benim repo kontrol edin: https://github.com/noxytrux/SwiftGeom i aslında bir inşa Bunun için tüm lib, bu yüzden daha fazla GLKit kullanmak zorunda kalmazsınız veya Apple'ın bunu hızlı bir şekilde yerine getirmesini beklemezsiniz.

3

Xcode 6.3/Swift 1.2'nin beta sürümünün dün (8 Şubat 2015) sürümü ile birlikte, artık Swift'den GLKit kullanmak mümkündür.

+1

GLKMatrices'i üniforma olarak nasıl geçeceğine dair bir fikriniz var mı? Başarısız bir UnsafePointer , dönüştürmek çalışıyorum. Olduğu gibi bazı işaretçiler isterim! – Gusutafu

+1

@Gusutafu 'var viewProj = GLKMatrix4Multiply (...) var pData = uniformBuffer.contents() pData.advancedBy (sizeof (GLKMatrix4) * inflightBufferIndex) let adresi = withUnsafePointer (& viewProj) {UnsafeMutablePointer ($ 0)} memcpy (pData, adres, sizeof (GLKMatrix4)) ' – aoakenfo

İlgili konular