2015-01-08 3 views
0

저는 Swift에서 앱을 작성하고 일부 Objective-C 코드를 브리징합니다. 이러한 클래스 중 하나에는 + (CLLocationCoordinate2D *)polylineWithEncodedString:(NSString *)encodedString;과 같은 메서드가 있습니다.Swift에서 UnsafeMutablePointer <CLLocationCoordinate2D>를 [CLLocationCoordinate2D]로 변환합니다.

스위프트에서이 메서드는 UnsafeMutablePointer<CLLocationCoordinate2D>을 반환합니다. 내가 원하는 건 스위프트 배열 CLLocationCoordinate2D입니다. 분명히 작동하지 않습니다 무엇

는하지만 시도, 이것이다 :

let coordinates: [CLLocationCoordinate2D] = TheClass.polylineWithEncodedString(encodedString) 

나에게 다음과 같은 오류 줄 것이다 :

'UnsafeMutablePointer<CLLocationCoordinate2D>' is not convertible to '[CLLocationCoordinate2D]' 

UnsafeMutablePointer<CLLocationCoordinate2D>을 변환 어떻게 든 가능을 [CLLocationCoordinate2D]? 아니면 다른 접근법을 사용해야합니까?

+0

중복 가능성 http://stackoverflow.com/questions/25560751/unsafemutablepointer-in-swift-as-replacement-for- 적절한 크기의 c-array-in-obj-c) – rakeshbs

+0

이것은 UnsafeMutablePointer <>에서 [] 로의 대신 []에서 UnsafeMutablePointer <>로 반대 방향으로 진행되는 것 같습니다. –

+0

@ViktorNilsson : 포인터를 통해 * 많은 * 요소가 반환되는 방법을 알고 있습니까? 배열이 어디에 할당되어 있으며 누가 그것을 해제해야합니까? - (참조 된 스레드 에서처럼) ObjC 함수로 채워지는 Swift 배열을 전달하는 것은 메모리 관리 측면에서 더 쉬울 것입니다. –

답변

0

포인터 뒤의 데이터 인 UnsafeMutablePointer 속성을 사용할 수 있습니다. 그러나 염두에 두십시오. UnsafeMutablePointer < CLLocationCoordinate2D>은 obj c 함수에서 선언 된 것과 같이 하나의 CLLocationCoordinate2D가 아니라 배열을 반환합니다.

var coordinate: CLLocationCoordinate2D = TheClass.polylineWithEncodedString(encodedString).memory 
([를 Obj-C에서 C 적절한 크기 배열에 대한 대체물로서 신속한에서 UnsafeMutablePointer]의
관련 문제