Objective-C로 Swift 파일을 읽을 때?

Objective-C의 프로젝트에서 Swift 파일의 상수를 사용하는 장면이 있는데 막혀서 필기도 겸하고 절차를 기사로 써봤습니다!

이번에 하고 싶은 거.


이번에 하고 싶은 일은 Objective-C의 프로젝트에서 버튼을 눌렀을 때 Sample라는 문자열이 아니라 Swift에서 정의한 Hello World!아이콘

1.프로젝트의 BuildSettings 설정


먼저 그림에서 보듯이 BuildSettings의 Defines Module를 '아니오' (기본 설정) 에서 '예' 로 변경합니다.
Defines Module을 직접 번역하면 모듈의 정의를 의미합니다.이것은 프레임의 눈썹과 함께 있는 모듈입니다.이것은 Xcode가 모듈e.privet.modulemap 파일을 설치하도록 지시하기 위해서입니다. (때로는 모듈e.prive.modulemap일 수도 있습니다.)
Swift 코드의 Objective-C를 사용하려고 합니다.m 파일의 경우 import Swift 코드에서 Xcode로 생성된 헤더 파일(Sample Project 1-Swift.h)이 필요합니다.Xcode에서 생성된 머리글 파일을 가져오면 Swift에서 프로젝트의 Objective-C 코드에서 선언된 유형을 처리할 수 있습니다.
여기서는 SampleProject1-Swift에 대해 설명합니다.h 파일을 생성하여 사용할 수 있습니다.

2. 기존 Swift 파일 다시 쓰기


Swift 파일의 클래스, 상수 및 변수는 Objective-C 파일에서 직접 사용할 수 없습니다.
수정해 드릴게요.
하고 싶은 거 다시 한 번 확인!
이번에 하고 싶은 일은 버튼을 눌렀을 때 Sample이라는 문자열이 아니라 Swift가 정의한 HelloText 상수인 HelloWorld를 보여주는 것이다.

storyboard 측


전제로 storyboard 측은 IBOutlet으로 각각 textLabel과 button을 연결하고 있다.

Swift 파일 측면


우선 반에 @objcMembers를 추가하거나 방법 전에 @objc를 추가해야 합니다.
이번에는 상수를 처리해야 하기 때문에,class Text 모델 앞에 @objcMembers를 붙입니다.
(구)변경 전↓
4
import Foundation

class TextModel : NSObject {
    let helloText:String = "Hello World"

}
(신규)변경 후 ↓
import Foundation

@objcMembers class TextModel : NSObject {
    let helloText:String = "Hello World"

}
TextModel

Objective-C 파일 면


Objective-C의 경우 SampleProject1-Swift가 먼저 사용됩니다.h를 가져와야 합니다.가져오지 않으면 Swift에서 쓴 클래스나 방법을 Objective-C 측면으로 읽을 수 없습니다.
(구)변경 전↓
4
#import "ViewController.h"
#import <UIKit/UIKit.h>

@interface ViewController()

@property (strong, nonatomic) IBOutlet UILabel *textLabel;
@property (strong, nonatomic) IBOutlet UIButton *button;

@end

@implementation ViewController

- (void)viewDidLoad{
    [super viewDidLoad];
    
}

- (IBAction)showText:(UIButton *)sender {
    self.textLabel.text =  @"Sample";
}
@end
(신규)변경 후 ↓
#import "ViewController.h"
#import <UIKit/UIKit.h>
#import "SampleProject1-Swift.h" //←ここでimport

@interface ViewController()

@property (strong, nonatomic) IBOutlet UILabel *textLabel;
@property (strong, nonatomic) IBOutlet UIButton *button;

@end

@implementation ViewController

- (void)viewDidLoad{
    [super viewDidLoad];
    
}

- (IBAction)showText:(UIButton *)sender {
    TextModel *model = [[TextModel alloc] init]; //←ここでSwift側のクラスをObjective-Cで定義
    self.textLabel.text = [model helloText]; //←定義したmodelの定数を呼び出す
}
@end

3. 구축 확인


이번에 버튼을 눌렀을 때 textLabel이 Hello World로 바뀌면 Swift 측의 상수가 호출된다.
그럼 구축해 보세요!Swift 측면의 상수가 호출되었는지 확인합니다.

Hello World라고 불렸네요!
이렇게 하면 스위프트 측의 상수가 호출되었음을 확인할 수 있다.물론 상술한 방법으로 방법을 호출할 수도 있다.Objective-C에서 Swift가 정의한 상수 & 변수, 방법 등을 사용해야 한다면 참고하십시오!
앞으로도 더 깊이 이해하고 더 자세히 설명하고 기사를 갱신할 수 있도록 잘 부탁드립니다!
읽어주셔서 감사합니다!

참고 문장


• Swift 및 Objective-C 결합 with Xcode
https://qiita.com/ysn/items/fa85612cb5adf9a4c05d#objective-c에서 swift를 호출하는 방법
• Swift 및 Cocoa 또는 Objective-C 사용
http://transxcode.com/Swift/Swift1.0.0/SwFObjC/SwiBaSe7.html
・Objective-C 프로젝트에서 Swift 프로그램의 방법, 속성의 접근 방법【Swift5】
https://program-life.com/980
• Objective-C의 Swift 클래스를 사용합니다.
https://nullpoint.hatenablog.com/entry/2017/05/23/230812

좋은 웹페이지 즐겨찾기