티스토리 뷰

Mobile/iOS

Objective-C <-> Swift 코드를 사용하기

out of coding 2019. 7. 11. 00:31

아주 쉽습니다... 조금 귀찮을 뿐입니다. ^^

공식문서 : https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c

 

Importing Swift into Objective-C | Apple Developer Documentation

Article Importing Swift into Objective-C Access Swift types and declarations from within your Objective-C codebase. OverviewYou can work with types declared in Swift from within the Objective-C code in your project by importing an Xcode-generated header fi

developer.apple.com

먼저 저는 프로젝트를 Objective-C 기반으로 만들었습니다.

다소 예제가 말도 안되게 만들었지만 Swift -> Objective-C -> Swift로 코드를 사용하는 방법을 설명하기 위해서 그랬습니다.

 

1. SwiftModule.swift

- 스위프트 예제를 가지고 오기 위해서 만들었습니다.

@objc class SwiftModule : NSObject {
    @objc func test() {
        print("test function")
    }
}

1. @objc를 사용하여 Objective-C에서 알아볼수 있도록 하였습니다.

2. NSObject를 상속받아 init이 없다는 에러가 나지 않도록 하였습니다.

 

2. ObjectiveModule.h + m

- 억지로 Swift Class를 사용하기 위해 만들었습니다.

// header

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface ObjectiveModule : NSObject

- (void) test;

@end

NS_ASSUME_NONNULL_END

// module

#import "ObjectiveModule.h"
#import <ObjectiveUseSwift-Swift.h>

@class SwiftModule;

@implementation ObjectiveModule

- (void) test {
    SwiftModule *module = [[SwiftModule alloc] init];
    [module test];
}

@end

1. header에는 test를 public으로 만들어주기 위해서 넣어주었으며

2. module에는 <ObjectiveUseSwift-Swift.h> 파일을 넣어주어서 안에서 객체를 가져와서 사용할수 있도록 하였습니다.

 

끝난게 아닙니다.

이렇게만 하면 바로 에러가 뿜뿜할겁니다.

왜냐면 우리가 지금 위에 지정한 header는 프로젝트 설정으로 하여금 자동으로 만들어준겁니다.

아니면 우리가 만들어줘야 하는데 너무 귀찮죠.

 

3. Project > TARGETS > Build Settings 으로 이동하면 다음과 같은것이 있는데 NO로 되어 있을겁니다.

이것을 YES로 만들어주고 build를 한번 하여 줍니다.

 

4. ObjectiveUseSwift-Bridging-Header

- 다시 Objective-C를 Swift에서 가져다가 사용하기 위해서 만들었습니다.

#import "ObjectiveModule.h"

이렇게 넣어줍니다.

 

이제 거의 다 왔습니다.

 

5. ViewController

- Objective-C를 Swift에서 가져와서 사용하는 예를 보여주려고 만들었습니다.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let module = ObjectiveModule.init()
        module.test()
    }
}

 

이제 보여주려는 예제는 다 보여주었습니다.

 

참고로 사용하였던 프로젝트 첨부합니다.

 

ObjectiveUseSwift.zip
0.04MB

아니면 깃헙에 놀러오세요.

 

https://github.com/outofcode-example/iOS-ObjectiveSwiftObjective

 

outofcode-example/iOS-ObjectiveSwiftObjective

Swift -> Objective-C -> Swift를 하여봅시다. Contribute to outofcode-example/iOS-ObjectiveSwiftObjective development by creating an account on GitHub.

github.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함