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 헤더 파일에 경고를 표시하지만 무시할 수 있습니다. 구현시 사용할 수 있습니다.
계획 프로토콜을 채택해야하는 사람이라면 경고 나 오류없이 두 단계로 수행 할 수 있습니다.
당신에
.swift
파일 추가,@objc
프로토콜 이름 앞에 :@objc protocol AnalyticProtocol { }
당신에
.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
'IT' 카테고리의 다른 글
정렬 된 목록의 색인을 반환하는 방법? (0) | 2020.08.05 |
---|---|
각도로 입력 요소의 ngModel 내에서 파이프 사용 (0) | 2020.08.05 |
SimpleXML에서 @attribute에 액세스 (0) | 2020.08.04 |
TSQL에서 JSON 구문 분석 (0) | 2020.08.04 |
JPEG를 다시 압축하지 않고 EXIF 데이터를 제거하는 방법은 무엇입니까? (0) | 2020.08.04 |