수색…


Swift에서 Objective-C 클래스 사용하기

기존 수업을 사용하려면 2 단계를 수행 한 다음 5 단계 로 건너 뜁니다. (어떤 경우에는 명시적인 #import <Foundation/Foundation.h 를 이전 ObjC 파일에 추가해야했습니다.)

1 단계 : Objective-C 구현 추가 - .m

클래스에 .m 파일을 추가하고 이름을 CustomObject.m 지정합니다 CustomObject.m

2 단계 : 브리지 헤더 추가

.m 파일을 추가 할 때 아래와 같은 프롬프트가 나타납니다.

여기에 이미지 설명을 입력하십시오.

예를 클릭하십시오!

프롬프트가 표시되지 않거나 우연히 브리징 헤더를 삭제 한 경우 새 .h 파일을 프로젝트에 추가하고 <#YourProjectName#>-Bridging-Header.h 이름을 지정하십시오

특히 ObjC 프레임 워크를 사용하는 경우 Objective-C 클래스를 명시 적으로 추가하지 않고 Xcode에서 링커를 찾을 수없는 경우가 있습니다. 이 경우 위에 언급 한대로 .h 파일을 만든 다음 대상의 프로젝트 설정에서 경로를 링크해야합니다.

여기에 이미지 설명을 입력하십시오.

노트

$(SRCROOT) 매크로를 사용하여 프로젝트를 링크하면 프로젝트를 이동하거나 원격 저장소를 사용하여 다른 사람과 작업 할 수 있으므로 작업은 계속 진행될 수 있습니다. $(SRCROOT) 는 .xcodeproj 파일이 들어있는 디렉토리로 생각할 수 있습니다. 다음과 같이 보일 수 있습니다.

$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

3 단계 : Objective-C 헤더 추가 - .h

다른 .h 파일을 추가하고 CustomObject.h 이름을 지정하십시오 CustomObject.h

4 단계 : Objective-C 클래스 만들기

CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

5 단계 : 브리징 헤더에 클래스 추가

YourProject-Bridging-Header.h :

#import "CustomObject.h"

6 단계 : 개체 사용

SomeSwiftFile.swift :

var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

명시 적으로 가져올 필요가 없습니다. 이것이 브리징 헤더입니다.

Objective-C에서 Swift 클래스 사용

1 단계 : 새로운 신속한 클래스 만들기

.swift 파일을 프로젝트에 추가하고 이름을 MySwiftObject.swift 지정하십시오 MySwiftObject.swift

MySwiftObject.swift :

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val"

    init() {}

    func someFunction(someArg:AnyObject) -> String {
        var returnVal = "You sent me \(someArg)"
        return returnVal
    }

}

2 단계 : 신속한 파일을 ObjC 클래스로 가져 오기

SomeRandomClass.m :

#import "<#YourProjectName#>-Swift.h"

파일 : <#YourProjectName#>-Swift.h<#YourProjectName#>-Swift.h 않더라도 프로젝트에 자동으로 생성되어야합니다.

3 단계 : 수업 사용

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

노트 :

1. CodeCompletion은 내가 원하는만큼 정확하게 행동하지 않았습니다. 내 시스템에서 빠른 빌드 w / "cmd + r"을 실행하면 Swift가 Objc 코드를 찾거나 그 반대로도 사용할 수 있습니다.

2. .swift 파일을 이전 프로젝트에 추가하고 오류가 발생하는 경우 : dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib , Xcode를 완전히 다시 시작하십시오.

3. Swift 2.0 이후 @objc 접두어를 사용하여 Objective-C에서 순수 Swift 클래스를 사용할 수는 있지만 더 이상 가능하지 않습니다. 원래 설명은 편집 내역을 참조하십시오. 향후 Swift 버전에서이 기능을 다시 사용할 수있게되면 답변도 그에 따라 업데이트됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow