나는 최근에 실제 프로젝트로 시험해보기 위해 기존 프로젝트에 Swift를 추가하려고 노력하고 있습니다.
Swift 소스 파일을 프로젝트에 추가 할 때 “Bridging Header”, 즉 Objective-C to Swift를 얻는 데 아무런 문제가 없습니다.
그러나 *-Swift.h
Swift 클래스를 표시 @objc
하거나 ObjC 클래스의 하위 클래스를 노출 해야하는 헤더 파일은 찾을 수 없습니다.
Swift로 작성된 새로운 하위 클래스를 주 응용 프로그램 코드 (여전히 Objective-C)로 사용하는 방법에 대한 구체적인 지침은 없습니다.
내가 리드 개발자 인 앱에는 상당히 큰 코드베이스 (70.000 줄)가 있으므로 한 번에 전환하면 문제가 발생하지 않습니다.
답변
이제 작동합니다.
- 프로젝트 에는 공백 이 없는 제품 모듈 이름이 있어야합니다 .
- 정의 모듈 로 설정해야합니다 예 포장에서, 빌드 설정에서.
마침내 작동합니다. 도움을 주신 모든 분들께 감사드립니다 🙂
답변
비슷한 문제가 있었고 추가 할 수 있다는 것을 알았습니다.
#import "ProductModuleName-Swift.h"
우산 헤더를 찾을 수 있도록 .h 파일이 아닌 obj-c .m 파일로
답변
파일을 생성하기 전에 모든 빌드 오류 를 수정해야한다는 것을 알았습니다 .
나를위한 문제는 실제로 닭고기 / 계란 문제라는 것이 었습니다 #import
.
//#import "ProductModuleName-Swift.h"
내 Swift 코드에 다른 많은 오류가 나타났습니다.
이 새로운 오류를 수정하고 소스 구축을 성공적으로 마치면 #import
및 빙고의 주석 처리를 제거했습니다 ! 헤더가 작성되어 올바르게 가져 오기 🙂
답변
당신이 나와 같다면 아마도 헤더 이름이 잘못되었을 것입니다. 잠시 동안 내 머리를 강타한 후 DerivedData에서 파일을 찾고 충분히 있는지 확인했습니다. 내 설정에서 (표준 파생 데이터 폴더 사용)
cd ~/Library/Developer/Xcode/DerivedData
find * -iname '*Swift.h'
찾을 것입니다. 해당 폴더의 어떤 것도 일치하지 않으면 Xcode가 생성하지 않습니다.
Xcode 버전 6.2 (6C86e)를 사용하고 있습니다
답변
프로젝트 모듈 이름에 공백이 있다면, 당신은 해야한다 밑줄 공간을 대체합니다.
예를 들어 프로젝트 이름이 “My Project”인 경우 다음을 사용합니다.
#import “My_Project-Swift.h”
답변
* 중요한 것은 : *
대상에 정의 된 “제품 모듈 이름”을 사용한 후 -Swift.h
#import <Product Module Name>-Swift.h
// in each ObjectiveC .m file having to use swift classes
// no matter in which swift files these classes sit.
“모듈 정의”매개 변수가 예 또는 아니오로 설정되어 있거나 “제품 모듈 이름”프로젝트가 설정되지 않은 경우에 관계없이.
주의 : ObjectiveC / Foundation에 노출 되려면 스위프트 클래스가 NSObject에서 파생되거나 @objc 속성으로 태그되어야합니다. 코코아 …
답변
Swift와 Objective-C 코드가 혼합 된 프레임 워크를 만들고 있었 으므로이 문제를 발견 할 수있는 또 다른 이유를 추가하고 싶었습니다. 프레임 워크 외부에서 Swift 클래스를 가져올 수 없었습니다. -Swift.h 파일을 확인했는데 파일이 생성되었지만 비어있었습니다.
문제는 매우 간단하다는 것이 밝혀졌습니다. 저는 스위프트 수업을 공개적으로 선언하지 않았습니다! 공개 키워드를 클래스에 추가하자마자 프레임 워크 내부 및 외부의 클래스에서 사용할 수있었습니다.
또한 프레임 워크 내부 (다른 답변에서 언급 한 것처럼 .m 파일 내부) -Swift.h 파일을 다음과 같이 가져와야했습니다.
#import <FrameworkName/FrameworkName-Swift.h>
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)