iOS
신속하고 객관적인 C 상호 운용성
수색…
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 버전에서이 기능을 다시 사용할 수있게되면 답변도 그에 따라 업데이트됩니다.