Swift 와 Objective-C 혼합 편집 주의사항
5079 단어 SwiftObjective-C혼합 편성 하 다
머리말
스 위 프 트 는 이미 출시 된 지 수년 이 지 났 으 며,오 브 젝 티 브-C 에 비해 스 위 프 트 의 언어 메커니즘 및 사용 편의 성 이 어느 정도 접목 되 어 iOS 입문 문턱 을 크게 낮 췄 다.물론 새로 들 어 온 어린이 신발 에 대해 서 는 복음 이 라 고 할 수 없 지만,전체 iOS 프로 그래 밍 종사자 들 에 게 는 정말'키 가 크 고,눈 깜짝 할 사이 에'키 가 작고 가난 하 다'는 것 이 었 다.게다가 학원 이 횡행 하면 서 대량 도매 로 iOS 는 그 당시 의 휘황찬란 함 을 더 이상 볼 수 없 었 다.iOS 10 이 출시 된 후에 Xcode 8 에 이 어 업 데 이 트 를 추 송 했 습 니 다.세심 한 사람 은 Xcode 8 에서 iOS 버 전의 최소 어 울 리 는 것 이 iOS 8.0 으로 바 뀌 었 고 Swift 버 전이 안정 되 었 습 니 다.어떤 의미 에서 보면 Swift 의 시대 가 본 격 적 으로 열 렸 고 Objective-C 를 대체 하 는 것 도 시간 문제 일 것 입 니 다.물론 그 전에 우리 도 준 비 를 잘 해 야 한다.올 해 는 점점 더 많은 회사 들 이 Swift 와 Objective-C 의 혼합 편성 을 시작 했다.
우 리 는 오늘 두 가지 혼합 편성 중의 주의사항 과 문 제 를 살 펴 보 자.
혼합 편성 하 다
혼합 편성 도 두 가지 상황 이 아니다.
Objective-C 프로젝트 나 파일 에 Swift 파일 사용 하기;
Swift 프로젝트 나 파일 에 Objective-C 파일 을 사용 합 니 다.
혼합 편집 과정 에서 가장 중요 한 두 파일:
1.브리지 파일
브리지 파일'ProjectName-Bridging-Header.h'는 다른 파일 을 처음 만 들 때 자동 으로 생 성 됩 니 다.실수 로 삭제 하면 수 동 으로 추가 할 수도 있 지만 이름 은"ProjectName-Bridging-Header.h"헤더 파일(이름 구성:프로젝트 이름-Bridging-Header.h)이 어야 합 니 다.이름 이 기억 나 지 않 으 면 직접 Header 파일 을 새로 만 든 후 Targets→Build Settings→Swift Compiler-Genel→Objective-C Bridging Header 에서 파일 경 로 를 설정 할 수 있 습 니 다.이 파일 은 주로 Swift 에서 OC 클래스 를 사용 할 때 사 용 됩 니 다.
2.Objective-C 생 성 된 인터페이스 헤더 이름 파일
이 파일 은 컴 파일 할 때 시스템 에서 생 성 된 Swift 파일 에 대응 하 는 Objective-C 의 헤더 파일 로,구체 적 으로 Targets→Build Settings→Swift Compiler-Genel→Objective-C Generated Interface Header Name 에서 설정 할 수 있 으 며,기본 파일 이름 은 프로젝트 이름-swift.h 로 변경 하지 않 습 니 다.
Objective-C 프로젝트 나 파일 에서 Swift 파일 을 사용 합 니 다.
OC 파일 에서 Swift 파일 의 클래스 를 호출 할 때 먼저 OC 파일 에\#import 를 추가 해 야 합 니 다."
ProjectName-swift.h"(이름 구성:프로젝트 이름-swift)
이 파일 은 프로젝트 에서 볼 수 없 지만 실제로 존재 합 니 다.컴 파일 한 후에 Command+이 파일 이름 을 누 르 면 구체 적 으로 생 성 된 코드 를 볼 수 있 습 니 다.
도입 후 구체 적 인 유형의 사용 은 OC 방식 으로 직접 사용 하면 된다.
Swift 프로젝트 나 파일 에 Objective-C 파일 사용 하기
Swift 에서 OC 파일 을 사용 할 때 는 브리지 파일 인 procject Name-Bridging-Header.h 파일 에 필요 한 헤더 파일 을 도입 하면 됩 니 다.
구체 적 으로 사용 하면 해당 하 는 Swift 문법 구조 에 따라 하면 된다.
혼합 편성 주의사항
혼합 편집 이 필요 한 Swift 클래스 에@obbc 성명 을 추가 하거나 NSObject 또는 NSObject 의 하위 클래스 를 계승 합 니 다.
class TestClass {
//
//
}
Objective-C 클래스 에서 TestClass 클래스 를 사용 하려 면@obbc 를 사용 하여 설명 하거나 TestClass 를 NSObject 나 NSObject 의 하위 클래스 에 계승 해 야 합 니 다.그렇지 않 으 면 ProductName-swift.h 를 도입 한 후 프로그램 에서 대응 하 는 클래스 를 찾 을 수 없습니다.제3자 프레임 워 크 사용
설정:target-->build setting-->Packaging-->Defines Module 은"Yes"입 니 다.
그리고 파일 Target->Build Phases->Link Binary 를 설정 하고 가 져 올 프레임 워 크 를 추가 합 니 다.
마지막 으로 abc-lib.framework 라 이브 러 리 의 abc.h 를 사용 하려 면 이렇게 설정 해 야 합 니 다.\#import"abc-lib/abc.h";
질문
사용자 정의 클래스 의 경우 Objective-C 의 클래스 는 Swift 의 클래스 를 계승 할 수 없습니다.즉,혼 편 될 OC 클래스 는 Swift 클래스 의 하위 클래스 가 될 수 없습니다.반대로 혼합 편성 이 필요 한 스 위 프 트 류 는 OC 의 클래스 를 계승 할 수 있다.주해
OC 매크로 파일
Swift 파일 이 OC 에서 정의 하 는 매크로 를 사용 하려 면 상수 간단 한 매크로 파일 만 사용 할 수 있 습 니 다.
Swift 만 의 특성
Swift 에는 많은 OC 에 없 는 특성 이 있 습 니 다.예 를 들 어 Swift 는 원 그룹,1 등 시민 을 위 한 함수,그리고 특유 의 매 거 진 유형 이 있 습 니 다.따라서 사용 할 혼합 파일 은 Swift 만 의 속성 문제 에 주의해 야 합 니 다.
사례 의 Swift 에서 OC 의 block 사용 하기
Swift 에서 Closure 를 사용 하면 Block 을 속성 으로 전송 할 수 없습니다.초기 화 방법 이나 함수 가 있어 야 합 니 다.
Objective-C 파일 중:
#import <UIKit/UIKit.h>
typedef void (^Myblock)(NSString *arg);
@interface FirViewController : UIViewController
//@property (copy, nonatomic) Myblock myBlock;
// , Swift , 。 , Block
- (void)transValue:(Myblock) block;
@end
다음은 m 파일 입 니 다.
#import "FirViewController.h"
@implementation FirViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)transValue:(Myblock)block
{
if (block)
{
block(@"firBack");
}
}
@end
Swift 파일 에서 리 셋:Swift 에서 OC 클래스 를 사용 할 때 먼저 브리지 파일 에 oc 의 헤더 파일 을 설명 합 니 다.
프로젝트 이름-Bridging-Header.h Swift 프로젝트 를 만 든 경우
import UIKit
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
}
@IBOutlet weak var goFirst: UIButton!
@IBAction func goFirstAction(sender: AnyObject)
{
let firVC:FirViewController = FirViewController()
firVC. transValue { ( arg:String !) -> Void in
self.aBtn?.setTitle(arg, forState: UIControlState.Normal)
}
self.navigationController?.pushViewController(firVC, animated: true)
}
스 위 프 트 와 오 브 젝 티 브-C 언어의 혼 편 이 이렇게 많이 공유 되 는데,신 께 서 소중 한 의견 을 주 셨 으 면 좋 겠 습 니 다!(짱!ε。@)읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.