Project-Swift.h를 Objective-C 클래스로 가져 오기…
Objective-C에서 프로젝트가 있는데 Objective-C를 이전에 가지고 있던 코드 클래스 파일로 일부 Swift를 가져 오려고합니다.
나는 애플 참조하지 않은 문서를 같은 프로젝트뿐만 아니라 SO의에서 스위프트와 목표 - C를 사용하는 방법에, 대한 질문 과 같은,하지만 여전히 아무 소용이 : 나는 퍼팅 후 오류를 발견하지 않는 파일을 가져 계속 #import "NewTestApp-Swift.h"
( NewTestApp
제품의 이름입니다 및 모듈).
여기 내가 지금까지 한 일이 있습니다.
- 에서가
Define Modules
선택한YES
응용 프로그램에 대한. - 제품 모듈 이름에 공백이 없는지 확인하십시오 (아래 질문 스크린 샷 참조).
#import "NewTestApp-Swift.h"
내가 사용하는 시도 내부를 ViewController.m
, ViewController.h
그리고 AppDelegate.m
하지만 그들 중 누구도 일을하지 않았습니다.
내가 뭘 잘못하고 있니? 당신의 도움을 주셔서 감사합니다.
설정 스크린 샷 :
현재 발생하는 오류 :
같은 문제가 발생하여 프로젝트를 obj-c 클래스로 신속하게 수 없습니다. Xcode 6을 사용하면 (Xcode 6+에서 작동 함) 이런 식으로 할 수 있어야 함 ....
- .h 파일에서 액세스해야하는 모든 클래스는 다음 과 같은 전달이어야합니다.
@class MySwiftClass;
- .m 파일에서만 코드가 동일한 프로젝트 (모듈 형)에있는 경우 코드를 가져와야합니다.
#import "ProductModuleName-Swift.h"
Apple 문서에 대한 링크
Swift 코드가 모듈 내부에있는 경우 (예 :)
#import <ProductName/ProductModuleName-Swift.h>
Swift 코드가 프로젝트 내부에있는 경우 (Swift와 ObjC 혼합) :
#import <ProductModuleName-Swift.h>
m 파일에 다음 줄을 추가해야합니다.
#import <NewTestApp/NewTestApp-Swift.h>
중요 : 수입 문에서 "<"를
객관적인 c로 신속하게 가져 오는 방법 :
- 모듈 이 YES로 설정 됨 (프로젝트에서-대상이 아님)
- 제품 모듈 이름이 설정 됨 (대상에서-프로젝트가 아닌)
ViewController.m에서 다음을 사용하여 빠른 코드를 가져옵니다.
#import "MyProductModuleName-Swift.h"
- Objective-c 프로젝트에 빠른 파일을 추가하면 (File-> New-> Swift) Xcode는 objective-c에서 Swift로 브리징 헤더 를 만들지 만 다른 방법으로 작동하도록하는 것이 중요 합니다.
Xcode의 GUI를 통해 구현 파일을 추가하고 단지 마지막 드래그하지 그것을 만들기 위해 나의 프로젝트에 기존의 기존-파일을 삭제의 나를 알고 만들기 위해 Swiftoverload이 퍼즐을 통해 조각을 위해 일 : http://nikolakirev.com / blog / swift-in-objective-c-project 사용
Xcode 8.2.1을 (를) 사용하고 Project > Build Settings> Objective-C Generated Interface Header Name 을 보면 Product -Swift.h 와 같은 하나의 헤더 파일 만 표시 됩니다.
이는 파일을 사용하여 Objective-C .m 파일과 각 모듈을 가져 오는 대신 오는 모든 Swift 모듈을 하나의 제품 -Swift.h를 가져옵니다 .
모듈을 개별적으로 가져 오는 전통적인 방법을 찾아 같은 문제가 발생했지만 현재 버전의 Xcode와 Swift 3에서는 모든 모듈 가져 오기에 하나의 헤더 만 사용하도록 변경했습니다.
Swift를 Objective-C 프로젝트로 가져 오는 데 문제가있었습니다. 결국 나는 Xcode 7이 생성하는 것을 확인하기 위해 Derivied Data 폴더를 조사했습니다. 파일 이름이 내가 예상했던 것과 완전히 달랐습니다.
실제 파일 이름이 있으면 가져 와서 프로젝트를 빌드 할 수 있습니다.
이 문제에 대해 한 시간을 보냈으며 다음 단계를 따르면 누락 된 사항을 이해하는 데 도움이됩니다.
- Xcode 환경 설정을 열고 DerivedData 폴더로 이동하십시오.
- 파인더에서 "swift.h"검색
- project-swift.h 파일을 찾을 수 없다면이 파일은 생성되지 않은 것입니다. 일반적으로 @objc를 빠른 클래스 중 하나에 추가하고 앱을 성공적으로 빌드해야합니다. 그러면 Xcode에서이 파일을 생성합니다.
- "xxx-swift.h"파일을 찾은 경우 import 문에 올바른 이름이 포함되어 있는지 확인하십시오.
모듈 정의 : 예 및 Obj-C 클래스의 .m 파일에서 "ProjectName-Swift.h"가져 오기
이것은 Obj-c의 Swift 클래스에 액세스하는 데 효과적이었습니다.
git을 사용하여 프로젝트를 작업 할 때 내 팀과 동일한 문제에 직면했습니다. 한 개발자가 최신 Swift 2.2 버전에 필요한 최신 버전 (7.3)으로 Xcode를 업데이트하지 않았습니다. 따라서 컴파일러는 새로운 Swift 구문을 인식하지 못했고 Swift 라이브러리 (projectname-swift.h)에 대한 인터페이스를 생성 할 수 없습니다. Xcode 버전이 최신 버전인지 확인하십시오!
개발 중에 일부 구문 오류로 인해 완전히 구현되지 않은 신속한 클래스가있을 가능성이 있습니다. swift 헤더 파일은 모든 swift 파일에 오류가없는 경우에만 사용할 수 있습니다.
신속한 파일에 구문 오류가 없는지 확인한 다음 목표-c 파일에서 신속한 헤더를 가져 오십시오.
헤더 파일 가져 오기, 즉
#import "<ProjectName>-Swift.h"
.h 파일 내에서 다음과 같은 오류가 발생했습니다.
-Swift.h '파일을 찾을 수 없습니다.
빌드가 실패했습니다.
대신 다음을 사용하십시오.
#import "<ProjectName>-Swift.h"
.m 파일 내에서 동일한 오류가 발생하더라도 프로젝트를 실행하면 오류가 표시되지 않습니다.
그런 다음 .m 파일 내에서 신속한 클래스를 사용할 수 있습니다.
-Swift.h
Swift 코드가 @objc
또는 [About]을 통해 API를 노출하는 경우 Xcode에 의해 자동으로 생성되어야합니다 @objcMembers
.
일반적으로 위치는 다음과 같습니다.
~/Library/Developer/Xcode/DerivedData/
ProductModuleName-foo/
Build/
Intermediates.noindex/
ProductModuleName.build/
Debug-iphoneos/
ProductModuleName.build/
DerivedSources/
ProductModuleName-Swift.h
다음과 같이 변경할 수 있습니다.
Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path
기본적으로 값은 $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
프로젝트 이름 (대상)에 문제가 있습니다. "-"기호가 포함되었습니다. 따라서 결정은 다음입니다. 프로젝트 이름이 "Test-App"이면 경쟁 클래스 이름은 "Test_App-Swift.h"입니다.
대상이 여러 개인 경우 모든 프레임 워크를 빌드했는지 확인하십시오.
'IT' 카테고리의 다른 글
Android : DB 버전 업그레이드 및 새 테이블 추가 (0) | 2020.07.23 |
---|---|
파일 찾기 및 복사 (0) | 2020.07.23 |
Visual Studio를 열 수 없습니다- '설정이 진행 중일 때 수 없습니다'오류 발생 (0) | 2020.07.23 |
저장소 패턴을 준수하면서 Laravel에서 관계 관리 (0) | 2020.07.23 |
EACH 루프에서 현재 색인 찾기 (Ruby) (0) | 2020.07.23 |