2016-08-03 3 views
0

현재 일부 이전 Objective-C 코드를 Swift로 변환 중이고 일부 C 코드가 달라 붙어 있습니다.Objective-C/C 콜백 코드를 Swift로 변환

콜백 기능이 필요한 내부 API가 있습니다.

DoSomethingWithCallback(myCallbackType callback); 

콜백 유형이 내 목표 - C/C 코드에서

typedef void(*myCallbackType)(struct customStruct *); 

지정되고 난 그냥

DoSomethingWithCallback(functionThatActsAsCallback); 

static void functionThatActsAsCallback(struct customStruct *myStruct) { 
.. 
} 

와 부를 수있는 모든 것을 추가

이것을 Sw로 변환하려고했습니다. 하여 콜백 함수

func functionThatActsAsCallback(myStruct: UnsafePointer<customStruct>) -> Void { 

} 

을 만들어 IFT 및 오류

유형의 값을 변환 할 수 없습니다 '(UnsafePointer) 결과

DoSomeThingWithCallback(functionThatActsAsCallback) 

를 통해 전화를하려고 노력 -> Void '를 인수 유형'myCallbackType! '에 추가하십시오.

이 오류가 발생하는 이유와 해결 방법이 확실하지 않습니다. 어떤 힌트

당신은 당신의 유형 및 기능을 사용하기 전에, 스위프트로 수입하는 방법을 확인해야
+0

유사한 문제를 설명하는 게시물이 거의 없습니다. [1] (http://stackoverflow.com/questions/37244438/cannot-convert-value-of-type-unsafepointerdouble-to-expected-argument-type), [ 2] (http://stackoverflow.com/questions/31626410/how-do-you-convert-a-unsafemutablepointervoid-to-uint8). – user3078414

답변

0

에 미리

감사합니다.

단일 .H 파일에 선언 된 모든 유형 및 기능이있는 경우 : 엑스 코드에 성공적으로 인덱스 프로젝트에

  • 기다립니다. (오류 라인을 주석으로 처리해야 할 수도 있습니다.)

  • Xcode 편집기에서 .h 파일을 엽니 다.

  • 편집기 창의 왼쪽 상단에있는 네 개의 사각형 아이콘을 클릭하고 "생성 된 인터페이스"를 선택하십시오.

내 샘플 프로젝트로이 입수했습니다 수 있습니다 : (. 당신은 수입 형의 이름이나 함수 이름에 Cmd를 클릭하여이 문제를 찾을 수 있습니다)

public typealias myCallbackType = @convention(c) (UnsafeMutablePointer<customStruct>) -> Void 

public func DoSomethingWithCallback(callback: myCallbackType!) 

그래서, 당신의 문제는 UnsafePointerUnsafeMutablePointer의 형식이 일치하지 않아 발생합니다.로 콜백 함수를 수정 :

func functionThatActsAsCallback(myStruct: UnsafeMutablePointer<customStruct>) -> Void { 

} 

그리고 같은 DoSomethingWithCallback 함수를 호출 : (. 일치 문자의 경우)

DoSomethingWithCallback(functionThatActsAsCallback) 


으로 폐쇄 정의 :

let functionThatActsAsCallback: myCallbackType = {myStruct->Void in 

} 

he lps에서 Swift가 유추 한 매개 변수 유형을 찾습니다.

+0

완벽한 설명, 고맙습니다. –

관련 문제