2014-07-08 3 views
11

그래서 저는 Ray Wenderlich의 튜토리얼에서 iOS 게임이라는 책을 사용하고 거기에있는 objective-C 코드를 활용하여 게임 작업에서 캐릭터의 가속도계 제어를합니다. Objective-C 대신 Swift를 사용하고 싶습니다. 3D 벡터를 나타내는 GLKVector3 유형의 var을 만들려고 할 때 문제가 발생했습니다. 내가 입력하는 경우 : 유형으로 모듈 GLKVector3의스위프트의 GLKit에서 GLKMath 사용하기

사용 :

var raw:GLKVector3 = GLKVector3Make(irrelevant stuff) 

을 나는 다음과 같은 오류가 발생합니다.

나는 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

내가 말할 수있는 한, 오늘처럼 스위프트가 아닙니다. 그들은 다음 버전에서 노동 조합을 구현할 수 있지만 그것에 대해서는 아무 것도 보지 못했습니다. [파일 버그보고!] (https://bugreport.apple.com) –

+0

가능한 해결 방법은 C 함수를 만드는 것입니다 : http://stackoverflow.com/questions/8262004/converting-cgpoint-to-glkvector2 -in-objective-c 수신기 (프레임 워크, objc 라이브러리)가 이미 공용체를 구현하는 경우. – LearnCocos2D

2

내 REPO을 확인하십시오 https://github.com/noxytrux/SwiftGeom을 내가 실제로 구축 전체 lib에 대한, 그래서 당신은 더 이상 GLKit을 사용하거나 애플이 신속하게 그것을 구현하기 위해 기다릴 필요가 없습니다.

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