답변:
가져와야 TargetName-Swift.h
합니다. 대상 이름입니다. 다른 답변은 클래스 이름을 사용하는 실수를합니다.
이 단일 파일은 주석이 있거나 주석을 @objc
받는 프로젝트의 모든 Swift 클래스에 대한 Objective-C 인터페이스를 정의하는 자동 생성 헤더입니다 NSObject
.
고려 사항 :
대상 이름에 공백이 포함 된 경우 (예 : 밑줄로 대체 My Project
됩니다 My_Project-Swift.h
)
대상이 프레임 워크 인 경우 가져와야합니다. <TargetName/TargetName-Swift.h>
Swift 파일이 대상의 구성원인지 확인하십시오
Apple 웹 사이트의 지침 :
동일한 프레임 워크에서 Swift 코드를 Objective-C로 가져 오려면
아래 빌드 설정 에 포장 , 확인하게 정의 모듈 이 프레임 워크 대상에 대한 설정이 설정되어 있음 . 이 구문을 사용하고 적절한 이름으로 대체하여 해당 프레임 워크 대상에서 해당 프레임 워크 대상 내의 Objective-C .m 파일로 Swift 코드를 가져 오십시오.
#import "ProductName-Swift.h"
개정:
"ProductName-Swift.h" 는 .m 파일 로만 가져올 수 있습니다 .
대상의 Swift 파일은이 import 문을 포함하는 Objective-C .m 파일에서 볼 수 있습니다.
주기적 참조를 피하려면 Swift를 Objective-C 헤더 파일로 가져 오지 마십시오. 대신, Objective-C 헤더에서 사용하도록 Swift 클래스를 전달할 수 있습니다. Objective-C에서 Swift 클래스를 서브 클래 싱 할 수 없습니다.
NSObject
!!! 에서 파생되어야합니다. 당신은 똑바로 class Blah
신속하게 선언하고 작동 시킬 수 없습니다 . 그것은 할 필요가class Blah : NSObject
수행 할 작업은 다음과 같습니다.
Objective-C에서 새 프로젝트 작성
새 .swift
파일
만들기
Xcode 프로젝트 파일을 클릭하십시오
빌드 설정을 클릭하십시오
검색 표시 줄을 찾아 모듈 정의를 검색하십시오 .
값을 예로 변경하십시오 .
제품 모듈 이름을 검색 하십시오 .
값을 프로젝트 이름으로 변경하십시오.
App delegate에서 다음을 추가하십시오. #import "YourProjectName-Swift.h"
참고 : Swift 파일을 사용할 때마다 다음 줄을 가져와야합니다.
#import "YourProjectName-Swift.h"
Defines module
에 Build settings
하는 것은 Yes
나를 위해 일을 고정 것입니다!
YourProjectName
의를 #import "YourProjectName-Swift.h"
프로젝트 이름에 특수 문자가 포함 된 경우 유용한 8 단계에서 프로젝트의 이름이됩니다 그리고 당신은 당신이 포맷하는 방법을 정확히하지 않습니다.
Swift
파일을 제대로 가져 Objective-c
오지 않으면 파일을 가져 오면 이 오류가 발생할 수 있습니다 import
.
참고 : Swift 파일을 외부로 가져올 필요는 없으며 신속한 파일을 처리하는 파일 하나만 가져와야합니다.
Objective-C 프로젝트 내에 Swift 파일 을 작성 / 복사 한 경우 . 브리징 헤더를 자동으로 생성했을 것입니다.
확인 Objective-C Generated Interface Header Name
에 Targets -> Build Settings
.
위의 내용에 KJExpandable-Swift.h
따라 그대로 가져옵니다 .
귀하의가 될 것입니다 TargetName-Swift.h
경우, TargetName
프로젝트 이름 또는 다른 대상에 따라 다릅니다은 추가하고 그것을 실행했을 수 있습니다.
첫 번째 단계:-
프로젝트 대상-> 빌드 설정-> 검색 ( '정의')-> 모듈 업데이트 값 정의 아니오 를 예로 선택하십시오.
"정의 모듈": YES .
"항상 Swift 표준 라이브러리 임베드": 예 .
"Objective-C 호환성 헤더 설치": 예 .
두번째 단계:-
아래와 같이 Objective C ".h"파일에 Swift 파일 클래스 추가
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
목표 C ".m"파일에서 'ProjectName (귀하의 프로젝트 이름) -Swift.h'가져 오기
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
동일한 프레임 워크 내에서 Swift 코드를 Objective-C 파일로 가져 오는 경우 한 가지주의 할 점이 있습니다 . 프레임 워크 이름과 꺾쇠 괄호를 지정하여 수행해야합니다.
#import <MyFramework/MyFramework-Swift.h>
MyFramework
다음은 "제품 모듈 이름"빌드 설정 ( PRODUCT_NAME = MyFramework
)입니다.
단순히 추가 #import "MyFramework-Swift.h"
하면 작동하지 않습니다. 빌드 된 제품 디렉토리를 확인한 경우 (이러한 #import
추가 되기 전에 대상에 일부 Swift 코드가있는 빌드가 하나 이상 성공한 MyFramework-Swift.h
경우) Headers
디렉토리에 파일이 계속 표시됩니다 .
Swift 4에서 프로젝트를 만든 다음 Objective-C 파일을 추가 한 경우 다음과 같이하십시오.
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
참조 : https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
동일한 프로젝트에서 Swift 및 Objective C에 대한 시험판 노트 확인
가져와야합니다
#import "SCLAlertView-Swift.h"
The name of this header is your product module name followed by adding "-Swift.h".
그것은 여러분이 작성한 클래스 이름이 아니라 제품 모듈의 이름이며 특정 파일뿐만 아니라 모든 신속한 파일을 가져 오는 것을 처리합니다
검색 "인터페이스 헤더 이름 생성 된 목표 - C" (의 그것을 말할 수 있도록 당신이 구축을 위해 노력하고있는 대상의 빌드 설정에서 MyApp-Swift.h
),이 설정 (값 가져 #import "MyApp-Swift.h"
액세스하려는 경우 소스 파일을) Swift API.
이 필드의 기본값은 $(SWIFT_MODULE_NAME)-Swift.h
입니다. "Objective-C Generated Interface Header Name"설정의 값 필드를 두 번 클릭하면 볼 수 있습니다.
또한 모듈 이름에 대시가있는 경우 (라고 가정 My-App
하십시오) $(SWIFT_MODULE_NAME)
모든 대시에서 밑줄로 바뀝니다. 그런 다음을 추가해야합니다 #import "My_App-Swift.h"
.
당신이 사용하려는 경우 스위프트 에 파일 오브젝티브 C의 이후 당신이 단계 아래에 따를 수 Xcode를 8에서, 그래서 클래스를 :
Objective-C에서 프로젝트를 작성한 경우 :
그것을 컴파일하면 x86_64 또는 armv 7 아키텍처의 이전 파일 (2.0)보다 최신 버전의 Swift 언어 (3.0)로 컴파일됩니다.
당신의 하나 더 변경
빌드하고 실행하십시오.
#import <TargetName-Swift.h>
키보드 #import <에서 입력하면 자동으로 Xcode가 조언합니다.
프로젝트 내에서 .PCH 파일을 찾으십시오. 다음 추가 #import "YourProjectName-Swift.h"
클래스 헤더를 가져옵니다이 있습니다. 따라서 특정 파일로 가져올 필요가 없습니다.
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif