IT

Objective-C 클래스에서 Swift 프로토콜 가져 오기

lottoking 2020. 8. 4. 22:49
반응형

Objective-C 클래스에서 Swift 프로토콜 가져 오기


이름 AnalyticProtocol이 Objective-C 클래스 인 Swift Protocol을 가져 오려고합니다 AnalyticFactory.

protocol AnalyticProtocol
{

}

기존 Objective-C 프로젝트에서 시작하고 있습니다 (xCode로 새 Swift 프로젝트를 만들지 갑자기 고 Objective-C 프로젝트를 xCode 6에서 Swift 프로젝트로 구성하는 방법을 찾지 못합니다 ).

내 스위프트에는 파일 .h파일 이름이 포함되어 MyProjectName-Swift.h있지만 컴파일러 는 존재하지 않는다는 오류를 반환 합니다 . 그래서 실제로 비어 있는 .h파일을 만들었습니다 MyProjectName-Swift.h(내가 무엇을 넣어야할지 모르겠습니다).

에서 애플 문서 그들은 내가 내 포함 할 필요가 있다고 말했다 .h지정된 파일 MyProjectName-Swift.h내에서 .m파일을. 그러나 나는 그것을 내 .m파일이 아니라 파일 에 포함합니다 .h. 이것이 문제가 될 수 있습니까?

오류가 발생합니다 : : 0 : 오류 : xxxAnalyticFactory.h : 39 : 'AnalyticProtocol'에 대한 프로토콜 선언을 수 없습니다

그리고 설명 된 코드 :

@interface AnalyticFactory : NSObject
{
    Class<AnalyticProtocol> _analyticProtocolClass; // The type of the analytic class currently used.
}

Swift 프로토콜을 Objective-C 클래스로 가져 오는 방법을 잘 이해하지 않고 생각합니다.

내가하고있는 일에 오류가있는 사람이 있습니까?


다음 @objc과 같이 속성을 Swift 프로토콜 에 추가해야합니다 .

@objc protocol AnalyticProtocol {

}

Xcode 생성 Swift 헤더를 objC 헤더 파일로 없습니다.

따라서 objC 헤더 파일에서 Swift 코드를 사용하는 다음과 같이 objC 헤더 파일에서 사용하려는 클래스와 프로토콜을 "앞으로 선언"해야합니다.

@protocol AnalyticProtocol;

이제 objC 클래스 선언에서 프로토콜을 사용할 수 있습니다.

@interface AnalyticFactory : NSObject
{
    Class<AnalyticProtocol> _analyticProtocolClass; // The type of the analytic class currently used.
}

구현 파일 (objC .m 파일)에서 Xcode Swift 헤더 ( "ProductModuleName-Swift.h") 파일을 AnalyticProtocol이제 올바른 구현 이 컴파일러에 알려줍니다.

이 내용은 Apple Docs의 "Objective-C에서 Swift 사용"섹션에도 설명되어 있습니다.

정방향 선언 된 프로토콜 ( 'AnalyticProtocol'에 대한 프로토콜 정의를 사용할 수 없음)을 사용할 때 XCode는 objC 헤더 파일에 경고를 표시하지만 무시할 수 있습니다. 구현시 사용할 수 있습니다.


계획 프로토콜을 채택해야하는 사람이라면 경고 나 오류없이 두 단계로 수행 할 수 있습니다.

  1. 당신에 .swift파일 추가, @objc프로토콜 이름 앞에 :

    @objc protocol AnalyticProtocol {
    
    }
    
  2. 당신에 .m파일을 생성 스위프트 헤더를 가져 오기 및 민간 부문에서 프로토콜을 채택한다. (헤더 파일의 이름은 자동으로 지정됩니다) :

    #import "ProductModuleName-Swift.h"
    
    @interface AnalyticFactory () <AnalyticProtocol>
    
    @end
    

이것이 Apple의 권장입니다. https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html 에서 Objective-C와 Swift의 혼합 및 일치에 대해 더 배울 수 있습니다.


프레임 워크를 작성하는 경우 필요한 가져 오기 오기

#import "ProductModuleName-Swift.h"

로 변경 :

#import <ProductModuleName/ProductModuleName-Swift.h>

이 경우 신속한 프로토콜을 공개 해야합니다 .

@objc public protocol AnalyticProtocol {
  func something();
}

참고 URL : https://stackoverflow.com/questions/24078242/importing-a-swift-protocol-in-objective-c-class

반응형