2014-06-06 6 views
2

Obj-C에서 Swift로 간단한 메소드를 변환하려고하는데, 어떻게해야하는지 문서에서 해결할 수 없습니다.참조로 Obj-C 패스를 Swift로 변환

- (void)getChar:(unichar *) outChar 
{ 
    *outChar = 'a'; 
} 

을 지금까지 스위프트이에있어 가장 가까운이있다 :

func getChar(inout outChar:CMutablePointer<unichar>) ->() 
{ 
    outChar = ("a" as NSString).characterAtIndex(0) 
} 

는 내가 이해하지 못하는 것을 설명하는 베어 뼈의 예와 방법을 단순화했습니다

물론 3 라인 오류가 있습니다. Unichar는 CMutablePointer로 변환 할 수 없습니다.

BuildingCocoaApps pdf에는 Obj-C에서 포인터를 사용하는 방법에 대한 짧은 섹션이 있지만 어떻게 관련이 있는지 알 수는 없습니다.

다른 사람이 어떻게하는지 설명 할 수 있습니까?

편집 :

unichar c; 
[myObject getChar:&c]; 

내가에서 호출 해요 때문에 나는의 FUNC 전에 @objc 추가 할 필요가 있음을 깨달았다 :이 같은의 Obj-C의 방법/FUNC를 호출하고 Obj-C. 이제는 더 많은 오류가 발생합니다.

+0

확실히 Obj-C에서 참조로 전달됩니다. Obj-C에는 모든 C 기능이 포함되어 있기 때문에이 언어에서. 코코아 API에서도 마찬가지입니다. 모든 scan * 메소드가 참조로 전달되는 NSScanner API에서 예제를 찾아보십시오. –

답변

3

편집 : Obj-C의 Swift 클래스 메서드를 사용하려고합니다.
#import <##Your-Project-Name##>-Swift.h
이 파일은 프로젝트에 표시되지 않지만 가져 오기를 Obj-C에서 스위프트 클래스를 사용하는 데 필요한 (:

확인 당신의 Obj-C 구현 파일 (하는 .m를) 확인은 신속한 수입있다 Apple documentation 참조).

#import <Foundation/Foundation.h> 
#import "ObjCTest-Swift.h" // <- VERY IMPORTANT! 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool 
    { 
     unichar someChar = '\0'; 

     // This is my Swift class 
     TextGenerator *textGenerator = [[TextGenerator alloc] init]; 
     [textGenerator generateChar:&someChar]; 

     NSLog(@"Character vaue is now %d", someChar); 
    } 

    return 0; 
} 

및 첨부 TextGenerator.swift 파일 : 여기 진짜 테이크 아웃 당신이 는 변형되기 수 없습니다

import Foundation 

@objc class TextGenerator : NSObject 
{ 
    @objc func generateChar(outChar:CMutablePointer<unichar>) 
    { 
     let testString : NSString = "The quick brown fox jumps over the lazy dog." 
     let firstChar = testString.characterAtIndex(0) 

     // Access the unichar * in an unsafe context to set the value directly 
     outChar.withUnsafePointer{ charPtr in charPtr.memory = firstChar } 

     // Alternatively, this is the shorthand form ($0 is the first arg) 
     outChar.withUnsafePointer{ $0.memory = firstChar } 
    } 
} 

입니다

나는 나의 main.m이과의 Obj-C 명령 줄 프로그램을 만들어 값은 CMutablePointer<Type>에 의해 직접 저장됩니다. 별도의 폐쇄에서 안전하지 않은 방식으로 값에 액세스하려면 withUnsafePointer을 사용해야합니다. 프로그래머가 실수로 포인터를 잘못 쓰는 것을 방지하려는 의도 일 수 있습니다.

+0

그러나 Obj-C와 상호 운용됩니다. 나는 거기에서 그것을 부를 것이다. 편집을 참조하십시오. –

+0

요구 사항을 반영하여 내 대답을 편집했습니다. – Erik

관련 문제